コンテナに繋がらない
問題名
コンテナに繋がらない
概要
大学2年生になり、人生で初めてエンジニアとしてアルバイトをICTSC社で始めたAくんは、上司から勉強を兼ねてDockerのNginxコンテナを使ってWEBサイトを公開して欲しいと依頼された。しかし、コンテナを立てても全く繋がらない。このコンテナに接続できない原因が何であるか調査し、Webサイトが表示されるよう修正せよ。
前提条件
- 初期状態で配置されているコンテナを作り直して解答しない
初期状態
curl 127.0.0.1:8080
をVM上で実行すると
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused
が表示される。
終了状態
なぜ繋がらないか原因を特定し、報告している。curl 127.0.0.1:8080
をVM上で実行すると
が表示される。
解説
Aくんは、Nginxコンテナを用いてWebサーバーを構築しました。
構築の際に用いたコマンド(コンテナを立ち上げたコマンド)は以下のようなものです。
docker run -d --name "nginx" --net="none" -p 8080:80 --restart=always nginx
Aくんはnoneネットワークにコンテナを接続すればデフォルトの設定が適用されていると考えていました。が、これは間違った認識でした。noneネットワークは外部・内部から隔離されたネットワークのため、このネットワークに接続してしまうとどこからも接続が出来なかったのです。内外からこのNginxコンテナに対して疏通を持たせるには、このNginxコンテナが接続しているネットワークを変更する必要があります。
以下がこのトラブルの主な解決方法です。
方法1:bridgeネットワークに接続する
docker network disconnect none nginx #1.noneネットワークから切断
docker network connect bridge nginx #2.bridgeネットワークに接続
方法2:自分でdockerネットワークを作成し,それに接続する
docker network create -d bridge webservice #1.例としてbridgeドライバーを用いた'webservice'ネットワークを作成
docker network disconnect none nginx #2.noneネットワークから切断
docker network connect webservice nginx #3.'webservice'ネットワークに接続
主な解法である上の方法のいずれかを行い、コンテナの作成時にコマンドで設定していたホスト側に開けられている8080番ポートに向けcurlコマンドcurl 127.0.0.1:8080
を実行し、疎通を確認すると、以下のようなWebサイトのレスポンスが返ってきます。これで疎通が確認できました。
採点基準
- なぜコンテナに繋がらないか、正しく原因を明らかにできている(30%)
- コンテナにアクセスできるよう修正されている(70%)