docker ENTRYPOINT上的多个命令

rad*_*led 9 docker dockerfile

我正在尝试构建自定义的tcserver docker映像。但是我在启动Web服务器和tomcat时遇到了一些问题。
据我了解,我应该使用ENTRYPOINT运行我想要的命令。
问题是,是否可以使用ENTRYPOINT运行多个命令?
还是应该创建一个小的bash脚本来全部启动?

基本上我想做的是:

ENTRYPOINT /opt/pivotal/webserver/instance1/bin/httpdctl start && /opt/pivotal/webserver/instance2/bin/httpdctl start && /opt/pivotal/pivotal-tc-server-standard/standard-4.0.1.RELEASE/tcserver start instance1 -i /opt/pivotal/pivotal-tc-server-standard && /opt/pivotal/pivotal-tc-server-standard/standard-4.0.1.RELEASE/tcserver start instance2 -i /opt/pivotal/pivotal-tc-server-standard
Run Code Online (Sandbox Code Playgroud)

但是我不知道这是否是一个好习惯,或者是否可行。

小智 19

你可以使用这样的东西:

ENTRYPOINT ["/bin/sh", "-c" , "<command A> && <command B> && <command C>"]

  • 如果我想在后台运行第一个命令,是否必须转义“&amp;”字符?例如: `ENTRYPOINT ["/bin/sh", "-c" , "service1 &amp; &amp;&amp; service2"]` 其中 service1 应该在后台运行,service2 在前台运行。 (5认同)

Tru*_*ang 18

如果您想在入口点运行许多命令。最好的主意是创建一个bash文件。例如bash文件可能会commands.sh这样

#!/bin/bash
mkdir /root/.ssh
echo "Something"
cd tmp
ls
...
Run Code Online (Sandbox Code Playgroud)

然后在您的DockerFile中。设置入口点为commands.sh文件(在其中执行并运行所有mand)

COPY commands.sh /scripts/commands.sh
RUN ["chmod", "+x", "/scripts/commands.sh"]
ENTRYPOINT ["/scripts/commands.sh"]
Run Code Online (Sandbox Code Playgroud)

之后,每次启动容器时。commands.sh将执行并运行您需要的所有命令。你可以在这里看看https://github.com/dangminhtruong/drone-chatwork