如何在 Dockerfile 上运行两个命令?

Pau*_*ulo 7 nginx docker gulp dockerfile docker-compose

我必须在 docker 文件上执行两个命令,但是这两个命令都附加到终端并阻止下一个执行。

码头档案:

FROM sinet/nginx-node:latest

RUN mkdir /usr/src/app

WORKDIR /usr/src/app

RUN git clone https://name:pass@bitbucket.org/joaocromg/front-web-alferes.git
WORKDIR /usr/src/app/front-web-alferes

RUN npm install 

RUN npm install bower -g 
RUN npm install gulp -g 
RUN bower install --allow-root 

COPY default.conf /etc/nginx/conf.d/

RUN nginx -g 'daemon off;' & # command 1 blocking

CMD ["gulp watch-dev"] # command 2 not executed
Run Code Online (Sandbox Code Playgroud)

有人知道我该如何解决这个问题?

Dan*_*iel 7

尝试创建这样的脚本:

#!/bin/sh
nginx -g 'daemon off;' & 
gulp watch-dev
Run Code Online (Sandbox Code Playgroud)

然后在你的 CMD 中执行它:

CMD /bin/my-script.sh
Run Code Online (Sandbox Code Playgroud)

另外,请注意您的最后一行将不起作用:

CMD ["gulp watch-dev"]
Run Code Online (Sandbox Code Playgroud)

它必须是:

CMD gulp watch-dev
Run Code Online (Sandbox Code Playgroud)

或者:

CMD ["gulp", "watch-dev"]
Run Code Online (Sandbox Code Playgroud)

另外,请注意,这RUN是用于执行将更改图像状态的命令(如RUN apt install curl),而不是用于执行在运行容器时需要运行的程序。从文档

RUN 指令将在当前图像之上的新层中执行任何命令并提交结果。生成的提交映像将用于 Dockerfile 中的下一步。


dsc*_*ldt 2

我建议你在这种情况下尝试supervisord。http://supervisord.org/

编辑:这是 httpd 和 ssh 守护进程的 docker 化示例:https://riptutorial.com/docker/example/14132/dockerfile-plus-supervisord-conf