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

时间:2019-07-23 17:18:39

标签: docker nginx gulp docker-compose dockerfile

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

dockerfile:

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

有人知道我该如何解决?

3 个答案:

答案 0 :(得分:2)

尝试创建这样的脚本:

#!/bin/sh
nginx -g 'daemon off;' & 
gulp watch-dev

然后在您的CMD中执行它:

CMD /bin/my-script.sh

另外,请注意您的最后一行将无法正常工作:

CMD ["gulp watch-dev"]

它必须是:

CMD gulp watch-dev

或:

CMD ["gulp", "watch-dev"]

还要注意,RUN用于执行将更改映像状态的命令(例如RUN apt install curl),而不是用于执行在运行容器时需要运行的程序。来自docs

  

RUN指令将在当前图像顶部的新层中执行所有命令,并提交结果。生成的提交映像将用于Dockerfile中的下一步。

答案 1 :(得分:1)

在这种情况下,我建议您尝试使用主管。 http://supervisord.org/

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

答案 2 :(得分:0)

这里的答案是RUN nginx -g 'daemon off;'故意在前台启动nginx,这将阻止您的第二条命令。此命令旨在以此为起点启动Docker容器。运行RUN nginx将启动nginx,创建主节点和子节点,并希望状态代码为零退出。尽管如上所述,这不是run的预期用途,所以在这种情况下,bash脚本效果最佳。