web-dev-qa-db-ja.com

Dockerfileで2つのコマンドを実行する方法

Dockerファイルに対して2つのコマンドを実行する必要がありますが、どちらのコマンドも端末に接続されており、次のコマンドからの実行をブロックしています。

dockerfile:

FROM sinet/nginx-node:latest

RUN mkdir /usr/src/app

WORKDIR /usr/src/app

RUN git clone https://name:[email protected]/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
Paulo

この場合は、監督者になることをお勧めします。 http://supervisord.org/

編集:httpdとsshデーモンのドッキングされた例を次に示します。 https://riptutorial.com/docker/example/14132/dockerfile-plus-supervisord-conf

0
dschuldt

ここでの答えはRUN nginx -g 'daemon off;'は意図的にnginxをフォアグラウンドで開始しているため、2番目のコマンドがブロックされています。このコマンドは、これをフォアグラウンドプロセスとして使用して、Dockerコンテナーを起動することを目的としています。ランニング RUN nginxはnginxを起動し、マスターノードと子ノードを作成し、(うまくいけば)ステータスコード0で終了します。上記のように、これはrunの使用目的ではないため、この場合はbashスクリプトが最適に機能します。

0
huberu