Docker:在另一个命令运行时运行命令

时间:2017-06-30 15:26:49

标签: docker dockerfile

我需要配置在docker容器中运行的程序。要实现该程序必须运行(并提供一个开放端口),以便管理程序可以连接到正在运行的进程。不幸的是,没有简单的可编辑配置文件,所以这是唯一的方法。 RUN命令显然不是正确的,因为它在docker转到下一个命令后不提供正在运行的实例。最好的方法是在构建docker镜像时执行此操作,但如果必须在容器启动期间完成它也可以。但是(据我所知)也没有简单的方法在启动时运行多个命令。有没有人知道如何做到这一点?

为了使它更清楚,这是我的Dockerfile中的一个简单示例:

# this command should start the application which has to be configured
RUN /usr/local/server/server.sh
# I tried this command alternatively because the shell script is blocking
RUN nohup /usr/local/server/server.sh &

# this is the command which starts an administration program which connects to the running instance started above
RUN /usr/local/administration/adm [some configuration parameters...]

# afterwards the server process can be stopped

下载包含正确状态的完整程序目录也是一种解决方案。但是在Dockerfile中配置不能轻易改变,那会很棒。

1 个答案:

答案 0 :(得分:0)

Dockerfile应该是生成图像的顺序指令列表。该图像应包含应用程序的代码及其所有可安装的依赖项。

每个RUN指令都作为自己的容器执行。一旦您运行的命令完成,任何已更改的文件都将作为新图像层提交。

尝试在后台运行进程会导致您运行的命令立即返回。一旦发生这种情况,容器被认为是停止的,Dockerfile的下一条指令将在一个新的独立容器中执行。

如果您确实需要运行两个进程,则需要生成一个可以传递给单个RUN指令的命令。

相关问题