web-dev-qa-db-ja.com

Docker化されたnginxが起動していません

Webサーバーのドッキングに関するチュートリアルとドキュメントをいくつか試しましたが、docker runコマンドでサービスを実行するのに問題があります。

これは私のDockerfileです:

FROM ubuntu:trusty

#Update and install stuff
RUN apt-get update
RUN apt-get install -y python-software-properties aptitude screen htop nano nmap nginx

#Add files
ADD src/main/resources/ /usr/share/nginx/html

EXPOSE 80
CMD service nginx start

イメージを作成します。

docker build -t myImage .

そして、私がそれを実行すると:

docker run -p 81:80 myImage

止まるようです:

docker ps -a

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
90e54a254efa        pms-gui:latest      /bin/sh -c service n   3 seconds ago       Exit 0                                  prickly_bohr

これはポート81-> 80で実行されると予想されますが、そうではありません。ランニング

docker start 90e

何もしないようです。

私も直接入力してみました

docker run -t -i -p 81:80 myImage /bin/bash

ここからサービスを開始できます

service nginx start

そして、別のタブから、それが意図したとおりに動作していることがわかります(私のブラウザでも):

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
408237a5e10b        myImage:latest      /bin/bash           12 seconds ago      Up 11 seconds       0.0.0.0:81->80/tcp   mad_turing 

だから私はそれがDockerfileで間違っていると思いますか?誰でもこれを手伝ってくれますか、私はDockerにはまったく新しいです。ありがとうございました!

SOLUTION: Ivantからの回答に基づいて、フォアグラウンドでnginxを起動する別の方法を見つけました。 Dockerfile CMDは次のようになりました。

CMD /usr/sbin/nginx -g "daemon off;"
34
Solvemon

現在のところ、公式のnginxイメージはこれを使用してnginxを実行します( Dockerfile を参照):

CMD ["nginx", "-g", "daemon off;"]

私の場合、これで適切に起動するのに十分でした。これを達成するためのより厄介な方法を提案するオンラインのチュートリアルがありますが、上記は非常にきれいに見えます。

71
Ben Creasy

Dockerコンテナは、CMDENTRTYPOINTで指定したコマンドが実行されている限り、またはコマンドラインから実行されている限り実行されます。あなたの場合、serviceコマンドはすぐに終了し、コンテナ全体がシャットダウンされます。

これを修正する1つの方法は、コマンドラインから直接nginxを起動することです(デーモンとして実行しないようにしてください)。

別のオプションは、サービスを開始し、その後永久にスリープする小さなスクリプトを作成することです。何かのようなもの:

#!/bin/bash
service nginx start
while true; do sleep 1d; done

serviceコマンドを直接実行する代わりにこれを実行します。

3番目のオプションは、通常のサービスではなく、 runit などのプログラムを使用することです。

23
ivant

Docker-composeの使用:

推奨されるソリューションに従うには、docker-compose.ymlに追加します:

command: nginx -g "daemon off"

また、nginx.confに簡単に追加できることもわかりました。

daemon off;

...そしてdocker-compose.ymlで引き続き使用します:

command: service nginx start

...ただし、設定ファイルはdockerの外部では移植性が低くなります。

7
macsteps

公式画像およびユーザー画像の非常に素晴らしいインデックスとしてのDocker。あなたが何かをしたいとき、チャンスはすでに誰かがそれをした可能性があります;)

Index.docker.ioで「nginx」を検索するだけで、公式のnginxイメージが表示されます: https://registry.hub.docker.com/_/nginx/

Webサーバーの起動に役立つ完全なガイドがあります。

他のユーザーのnginxイメージを見て、バリアントを見てください:)

考え方は、フォアグラウンドモードでnginxを起動することです。

4
creack