質問: 現在ec2を立ち上げて、そこからDockerfileを作成、ビルド、コンテナの起動をして、そのコンテナに接続できるか確認しています。 ``` FROM centos:latest RUN yum install -y httpd EXPOSE 80 RUN echo "Hello Apache." > /var/www/html/index.html CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] #ENTRYPOINT ["/usr/sbin/httpd","-DFOREGROUND"] #ENTRYPOINTでもCMD両方を試しましたが、どちらも結果として接続できませんでした。 ``` Dockerfileはhttpdをインストールしてhttpdをフォアグラウンドで実行するだけのものです。 以下手続きを書いていきます。 ``` # ビルドを実行 docker image build -t dockerpractice ./ # コンテナを実行 docker run -d -p 8080:80 dockerpractice # コンテナのhttpdが起動しているか確認 docker exec -it (コンテナID) /bin/bash ps -ef # 確認するとapacheが動いていることを確認できています。 # ブラウザでdocerコンテナのwebサーバーに以下のurlで接続を試みるが接続できない (ec2パブリックIP):8080 ``` ### その他試したこと 1. dockerを使わないでec2インスタンスに直接httpdをインストールして接続すると、接続することができています。 -> httpに関するセキュリティグループ(ポート80)に関しては問題ないことはわかっている。 また、dockerを使わないと接続できていることから、原因はdockerを使っていることに起因する何かだと推測している。 2. Dockerfileの使用イメージは、”FROM centos:latest”と”FROM centos:centos7.2.1511”を試していますが、両方結果として接続できないでいます。コンテナの起動には問題ないと思われる。 ### 参考 ps -efコマンド実行結果は以下になります。 ``` # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 6 1 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 7 1 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 8 1 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 9 1 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 10 1 0 23:39 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 11 0 3 23:39 pts/0 00:00:00 /bin/bash root 24 11 0 23:39 pts/0 00:00:00 ps -ef ```
回答: t_obara様のご助言により解決できました。 問題解決の筋道は、以下のようになりました。 dockerコンテナに80番ポートで接続してみる。 -> 接続できた。しかしながら8080番ポートでは依然として接続できないでいる。 docker側の問題ではないと診断する。 -> EC2側に問題がある可能性。外部から8080ポートの接続できない可能性。 -> セキュリティグループを確認したところ、80番ポートしか空いていない。 セキュリティグループに8080番を追加してdockerコンテナを起動してサイド接続を試みる。 ->接続できた。 結論:セキュリティグループの設定ミスでした。