質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1847閲覧

ec2からhttpdの入ったコンテナを起動しているが接続できない

chapin

総合スコア80

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2020/08/28 00:46

現在ec2を立ち上げて、そこからDockerfileを作成、ビルド、コンテナの起動をして、そのコンテナに接続できるか確認しています。

Dockerfile

1FROM centos:latest 2 3RUN yum install -y httpd 4 5EXPOSE 80 6RUN echo "Hello Apache." > /var/www/html/index.html 7 8CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] 9#ENTRYPOINT ["/usr/sbin/httpd","-DFOREGROUND"] 10#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を使っていることに起因する何かだと推測している。

  1. 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/08/28 02:52

問題の切り分け方として、うまくいっている場合と比較して差分を小さくして確認すると良いです。 そういう意味で、dockerを使わずに接続した時のポートは80ですか、8080ですか?80で試したのであれば、dockerを使った場合も80を使って試してみてください。 コンテナ実行時に以下とするだけです。 docker run -d -p 80:80 dockerpractice
chapin

2020/08/28 04:07

t_obara様 問題の切り分けのアドバイスありがとうございます。 おっしゃられたとおりに docker run -d -p 80:80 dockerpractice のコマンドを試したところ、無事予測されたhtmlを表示することができました。 しかし依然としてport番号を docker run -d -p 8080:80 dockerpractice で別のコンテナを立ち上げたところ接続できないでいます。 原因は-pオプションの設定が悪かったと言えますが、自分の感覚では8080番ポートでも接続できると思われるのですが、何故かうまくいきません。何か原因となるキーワードをご存知でしたら教えていただきたいです。
chapin

2020/08/28 04:13

なお、プロセスを表示したところ80:80と8080:80で行った結果は同じ結果を示していました。 docker exec -it charming_einstein ps -ef(80:80の場合) UID PID PPID C STIME TTY TIME CMD root 1 0 0 04:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 6 1 0 04:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 7 1 0 04:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 8 1 0 04:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 9 1 0 04:00 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 226 0 0 04:09 pts/0 00:00:00 ps -ef docker exec -it pedantic_haslett ps -ef (8080:80の場合) UID PID PPID C STIME TTY TIME CMD root 1 0 0 04:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 6 1 0 04:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 7 1 0 04:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 8 1 0 04:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 9 1 0 04:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 221 0 0 04:09 pts/0 00:00:00 ps -ef どこかに原因があると思われると思うのですが、差し支えがなければ、どのあたりに原因があると思われますか。
t_obara

2020/08/28 04:40

ポート番号によりアクセスの可否が変わるということがわかったのであれば、問題はdockerではないと判断できます。外部から8080でアクセスできないようにec2の設定がなされているのでは?
chapin

2020/08/28 05:00

ご指摘の通り、セキュリティグループのポート番号を80番しか開けていないことが原因でした。 セキュリティグループにTCPプロトコルで8080番を開けたところ、何もなかったかのようにhtmlを表示することができました。 私の認識ではセキュリティグループとしてHTTPを開けておいたから通るはずだと、チェックすらできていませんでした。 この問題で2日ほど足止めを食っていましたので、感謝してもしきれません。 ご助言いただきまして誠にありがとうございました。
guest

回答1

0

自己解決

t_obara様のご助言により解決できました。

問題解決の筋道は、以下のようになりました。

dockerコンテナに80番ポートで接続してみる。
-> 接続できた。しかしながら8080番ポートでは依然として接続できないでいる。

docker側の問題ではないと診断する。
-> EC2側に問題がある可能性。外部から8080ポートの接続できない可能性。
-> セキュリティグループを確認したところ、80番ポートしか空いていない。

セキュリティグループに8080番を追加してdockerコンテナを起動してサイド接続を試みる。
->接続できた。

結論:セキュリティグループの設定ミスでした。

投稿2020/08/28 05:06

chapin

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問