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

我需要configuration一个在Docker容器中运行的程序。 为了实现该程序必须运行(并提供一个开放的端口),以便pipe理程序可以连接到正在运行的进程。 不幸的是没有简单的可编辑configuration文件,所以这是唯一的方法。 RUN命令显然不是正确的,因为在docker转到下一个命令之后它没有提供正在运行的实例。 最好的方法是在build造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 

下载包含正确状态的完整程序目录也是一个解决scheme。 但是,在Dockerfile中configuration不能轻易改变,那将是一件好事。

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

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

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

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