我正在使用JHipster创建springboot应用程序,我认为它使用JIB来创建docker容器。一切都很好,但是做一个启动脚本或者运行额外的东西会怎么样呢?在我的例子中,我需要启动一个apt安装的服务。
CMD service pcscd start 如果我只是放在图像,这将不会发生在启动。当我将它添加到Kubernetes中的POD定义中时,它会删除springboot应用程序的启动,然后像我想要的那样退出,只需运行命令。如何运行启动脚本,首先启动我的pcscd服务,然后启动spring引导应用程序?
发布于 2019-11-05 16:36:07
运行多个命令有多种方法,主要是使用shell:
ENTRYPOINT的"shell表单“运行这些命令。(然而,Dockerfile引用更倾向于下面的"exec表单“。)在场景后面,这个"shell表单“实际上运行了一个shell二进制文件(如/bin/sh),并让shell解释”脚本“(这里是echo one && echo two)。FROM ubuntu:bionic
ENTRYPOINT echo one && echo twoENTRYPOINT的"exec表单“运行这些命令。在这种情况下,直接调用shell二进制文件。FROM ubuntu:bionic
ENTRYPOINT ["/bin/sh", "-c", "echo one && echo two"]#/bin/sh所示)解释脚本文件中的内容。echo -e '#/bin/sh'"\necho one && echo two" > my-entrypoint.shFROM ubuntu:bionic
COPY my-entrypoint.sh /
RUN chmod +x /my-entrypoint.sh
ENTRYPOINT /my-entrypoint.shENTRYPOINT ["/bin/sh", "-c", "/my-entrypoint.sh"](FYI,您可以使用ENTRYPOINT或CMD进行组合,但我不打算讨论这个问题,因为对于执行多个命令,通常ENTRYPOINT就足够了。您可以检查Dockerfile引用来了解ENTRYPOINT和CMD如何交互。)
对于Jib,可以使用<container><entrypoint> / container.entrypoint自定义图像入口点。(查看Maven和Gradle引用。)您可以使用<extraDirectories>特性(Maven / Gradle)提供任意文件,包括shell脚本。此外,<extraDirectories>允许使用<permissions>向shell脚本提供例如可执行位。
还请注意,默认的Java使用的没有/bin/sh二进制文件(一个shell),因此您必须使用另一个具有shell的基本映像。
最后,请注意,我只是回答如何实现对容器映像运行多个命令。这不一定是在Kubernetes (或任何生产环境)上以健壮和弹性的方式运行服务的理想方法。
https://stackoverflow.com/questions/58703883
复制相似问题