如何在 java 应用程序直接从 docker 入口点启动之前 运行 脚本?

How to run script before java application start directly from docker entrypoint?

ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

这是我当前在 Dockerfile

中的定义

问题:是否可以在此之前简单地执行另一个 .sh 脚本,而不必编写额外的 entrypoint.sh 脚本?

伪代码:

ENTRYPOINT ["init.sh", "&&", "java", "org.springframework.boot.loader.JarLauncher"]

而不是:ENTRYPOINT[ "wrapper.sh" ]

首先 运行 脚本的一个简单方法是使用 shell 版本的 ENTRYPOINT 指令而不是您使用的 exec 版本(阅读 https://docs.docker.com/engine/reference/builder/#entrypoint 了解更多信息) .

运行 a shell 允许您 运行 多个命令,用 && 分隔它们。所以你可以做

ENTRYPOINT init.sh && java org.springframework.boot.loader.JarLauncher

如果启动容器的过程变得更加复杂,您应该像 David 建议的那样创建一个入口点包装器脚本。