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;"
現在のところ、公式のnginxイメージはこれを使用してnginxを実行します( Dockerfile を参照):
CMD ["nginx", "-g", "daemon off;"]
私の場合、これで適切に起動するのに十分でした。これを達成するためのより厄介な方法を提案するオンラインのチュートリアルがありますが、上記は非常にきれいに見えます。
Dockerコンテナは、CMD
、ENTRTYPOINT
で指定したコマンドが実行されている限り、またはコマンドラインから実行されている限り実行されます。あなたの場合、service
コマンドはすぐに終了し、コンテナ全体がシャットダウンされます。
これを修正する1つの方法は、コマンドラインから直接nginxを起動することです(デーモンとして実行しないようにしてください)。
別のオプションは、サービスを開始し、その後永久にスリープする小さなスクリプトを作成することです。何かのようなもの:
#!/bin/bash
service nginx start
while true; do sleep 1d; done
service
コマンドを直接実行する代わりにこれを実行します。
3番目のオプションは、通常のサービスではなく、 runit などのプログラムを使用することです。
Docker-composeの使用:
推奨されるソリューションに従うには、docker-compose.ymlに追加します:
command: nginx -g "daemon off"
また、nginx.confに簡単に追加できることもわかりました。
daemon off;
...そしてdocker-compose.ymlで引き続き使用します:
command: service nginx start
...ただし、設定ファイルはdockerの外部では移植性が低くなります。
公式画像およびユーザー画像の非常に素晴らしいインデックスとしてのDocker。あなたが何かをしたいとき、チャンスはすでに誰かがそれをした可能性があります;)
Index.docker.ioで「nginx」を検索するだけで、公式のnginxイメージが表示されます: https://registry.hub.docker.com/_/nginx/
Webサーバーの起動に役立つ完全なガイドがあります。
他のユーザーのnginxイメージを見て、バリアントを見てください:)
考え方は、フォアグラウンドモードでnginxを起動することです。