有多种方法可以运行多个命令,主要是使用shell:
- 使用
ENTRYPOINT
的“ shell形式”运行命令。 (但是,Dockerfile
引用更喜欢下面的“ exec形式”。)在幕后,这个“ shell形式”实际上运行一个shell二进制文件(如/bin/sh
),并让shell解释“脚本” (在这里,echo one && echo two
)。
FROM ubuntu:bionic
ENTRYPOINT echo one && echo two
- 使用
ENTRYPOINT
的“执行表单”运行命令。在这种情况下,将直接调用shell二进制文件。
FROM ubuntu:bionic
ENTRYPOINT ["/bin/sh","-c","echo one && echo two"]
- 如果命令变得复杂,请考虑将其放入文件中。现在,shell二进制文件(如下面文件顶部的
#/bin/sh
所示)解释了脚本文件中的内容。
echo -e '#/bin/sh'"\necho one && echo two" > my-entrypoint.sh
FROM ubuntu:bionic
COPY my-entrypoint.sh /
RUN chmod +x /my-entrypoint.sh
ENTRYPOINT /my-entrypoint.sh
- 与上面类似,但请使用“执行表单”。
ENTRYPOINT ["/bin/sh","/my-entrypoint.sh"]
(仅供参考,您可以使用ENTRYPOINT
或CMD
进行合并,但是我不愿赘述,因为对于执行多个命令,通常ENTRYPOINT
就足够了。您可以检查Dockerfile
参考资料以了解ENTRYPOINT
和CMD
的相互作用。)
对于Jib,您可以使用<container><entrypoint>
/ container.entrypoint
自定义图像入口点。 (检查Maven和Gradle引用。)然后,您可以使用<extraDirectories>
功能(Maven / Gradle)提供包括shell脚本的任意文件。此外,<extraDirectories>
允许使用<permissions>
向shell脚本提供可执行位。
还请注意,Jib使用的默认Java基本映像没有/bin/sh
二进制文件(外壳程序),因此您将不得不使用具有外壳程序的其他基本映像。
最后,请注意,我只是在回答如何实现对容器映像运行多个命令。这不一定是在Kubernetes(或任何生产环境)上以健壮和有弹性的方式运行服务的理想方法。
本文链接:https://www.f2er.com/3162566.html