2017-06-30 205 views
0

我需要配置在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中配置不能轻易改变,那将会很棒。

回答

0

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

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

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

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

+1

谢谢,我现在写了一个shell脚本并运行它,因为它只有一个命令。这似乎工作 – UoS