docker ENTRYPOINT 上的多个命令

问题描述 投票:0回答:4

我正在尝试构建自定义 tcserver docker 映像。但我在启动网络服务器和 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

但我不知道这是否是一个好的做法,或者是否有效。

docker dockerfile
4个回答
105
投票

如果您想在入口点运行许多命令,最好的想法是创建一个 bash 文件。例如

commands.sh
这样

#!/bin/bash
mkdir /root/.ssh
echo "Something"
cd tmp
ls
...

然后,在 DockerFile 中,将入口点设置为

commands.sh
文件(执行并运行其中的所有命令)

COPY commands.sh /scripts/commands.sh
RUN ["chmod", "+x", "/scripts/commands.sh"]
ENTRYPOINT ["/scripts/commands.sh"]

此后,每次启动容器时,

commands.sh
将执行并运行您需要的所有命令。你可以在这里看看https://github.com/dangminhtruong/drone-chatwork


83
投票

你可以使用这样的东西:

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


0
投票

我个人遇到了一个问题,我需要保留父图像的行为。 我的解决方案 例子 : Dockerfile(父级)

RUN ...
RUN ...
COPY /entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["default_param1"]

Dockerfile(子)

RUN mv /entrypoint.sh /parent-entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["default_param1"]

/入口点.sh

#!/bin/sh
/runMyscript.sh ; /parent-entrypoint.sh $@

-13
投票

您可以使用 npm

concurrently
包。

例如

ENTRYPOINT ["npx","concurrently","command1","command2"]

它将并行运行它们。

© www.soinside.com 2019 - 2024. All rights reserved.