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

Docker:在另一个命令运行时运行命令,docker,dockerfile,Docker,Dockerfile,我需要配置在docker容器中运行的程序。要实现这一点,程序必须正在运行(并提供开放端口),以便管理程序可以连接到正在运行的进程。不幸的是,没有简单的可编辑配置文件,所以这是唯一的方法。RUN命令显然不是正确的,因为docker转到下一个命令后,它没有提供正在运行的实例。最好的方法是在构建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中的配置不能轻易更改,这将是一件好事。

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

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

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


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

谢谢,我现在编写了一个shell脚本,并运行它,因为它只是一个命令。这似乎有效