如何启动Spring Boot服务并运行启动脚本

时间:2019-11-05 03:02:14

标签: spring-boot jhipster jib

我正在使用JHipster创建springboot应用程序,并且我认为它使用JIB创建了docker容器。一切正常,但是执行启动脚本或运行其他操作呢?就我而言,我需要启动apt安装的服务

CMD service pcscd start 

如果我仅显示图片,则启动时不会发生。当我将其添加到Kubernetes的POD定义中时,它消除了springboot应用程序的启动,并且像我想做的所有退出操作一样退出。如何运行启动脚本,该脚本将首先启动pcscd服务,然后再启动spring boot应用程序?

1 个答案:

答案 0 :(得分:1)

有多种方法可以运行多个命令,主要是使用shell:

  1. 使用ENTRYPOINT的“ shell形式”运行命令。 (但是,Dockerfile引用更喜欢下面的“ exec形式”。)在幕后,这个“ shell形式”实际上运行一个shell二进制文件(如/bin/sh),并让shell解释“脚本” (在这里,echo one && echo two)。
FROM ubuntu:bionic
ENTRYPOINT echo one && echo two
  1. 使用ENTRYPOINT的“执行表单”运行命令。在这种情况下,将直接调用shell二进制文件。
FROM ubuntu:bionic
ENTRYPOINT ["/bin/sh", "-c", "echo one && echo two"]
  1. 如果命令变得复杂,请考虑将其放入文件中。现在,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
  1. 与上面类似,但请使用“执行表单”。
ENTRYPOINT ["/bin/sh", "-c", "/my-entrypoint.sh"]

(仅供参考,您可以使用ENTRYPOINTCMD进行合并,但是我不愿赘述,因为对于执行多个命令,通常ENTRYPOINT就足够了。您可以检查Dockerfile参考资料以了解ENTRYPOINTCMD的相互作用。)

对于Jib,您可以使用<container><entrypoint> / container.entrypoint自定义图像入口点。 (检查MavenGradle引用。)然后,您可以使用<extraDirectories>功能(Maven / Gradle)提供包括shell脚本的任意文件。此外,<extraDirectories>允许使用<permissions>向shell脚本提供可执行位。

还请注意,Jib使用的默认Java基本映像没有/bin/sh二进制文件(外壳程序),因此您将不得不使用具有外壳程序的其他基本映像。

最后,请注意,我只是在回答如何实现对容器映像运行多个命令。这不一定是在Kubernetes(或任何生产环境)上以健壮和有弹性的方式运行服务的理想方法。