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

wrrgggsh  于 2022-12-08  发布在  Gulp
关注(0)|答案(3)|浏览(175)

我必须在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

有人知道我该怎么解决这个吗?

zxlwwiss

zxlwwiss1#

尝试创建如下脚本:

#!/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),而不是用来执行一个在运行容器时需要运行的程序。
RUN指令将在当前映像之上的新层中执行任何命令,并提交结果。提交的结果映像将用于Dockerfile中的下一步。

agxfikkp

agxfikkp2#

我建议你在这种情况下试试supervisord.http://supervisord.org/
编辑:下面是httpd和ssh守护进程的一个停靠示例:https://riptutorial.com/docker/example/14132/dockerfile-plus-supervisord-conf

igsr9ssn

igsr9ssn3#

这里的答案是RUN nginx -g 'daemon off;'故意在前台启动nginx,这会阻塞您的第二个命令。此命令旨在启动docker容器,并将其作为前台进程。运行RUN nginx将启动nginx,创建主节点和子节点,并(希望)退出时状态码为零。虽然如上所述,这不是run的预期用途,所以bash脚本在这种情况下最好。

相关问题