🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Apache

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

Docker

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

21484閲覧

dockerでtomcatとapacheのAJPの接続がうまくいかない

k-higa

総合スコア20

Apache

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

Docker

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2017/06/07 13:00

ローカル環境でdockerでapache、tomat、postgresのコンテナを作成し、連携しようとしているのですがtomcatとapacheのAJPの接続がうまくいきません。
ご教授願います。

httpd.conf 一部抜粋

Listen 80 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so ProxyPass / ajp://127.0.0.1:8009/

server.xml 一部抜粋

<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

docker ps の内容

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a68b0292b1b dockerdir_apache "httpd-foreground" 35 seconds ago Up 33 seconds 0.0.0.0:80->80/tcp apache 0083abec2683 dockerdir_tomcat "/opt/tomcat/bin/c..." 36 seconds ago Up 34 seconds 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp tomcat 28b490fea146 dockerdir_postgresql "docker-entrypoint..." 38 seconds ago Up 35 seconds 0.0.0.0:9432->5432/tcp postgres-db b2a9c76f2970 busybox "sh" 39 seconds ago Exited (0) 37 seconds ago postgres-datastore

docker-compose.yml

apache: build: ./docker-apache container_name: apache restart: always ports: - "80:80" links: - tomcat:tomcat tomcat: build: . container_name: tomcat restart: always ports: - "8080:8080" - "8009:8009" links: - postgresql:pg postgres-data: image: busybox volumes: - /var/lib/postgresql/data container_name: postgres-datastore postgresql: build: ./docker-postgres restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "9432:5432" container_name: postgres-db volumes_from: - postgres-data

http://localhost:80にアクセスするとエラー

apache | [Wed Jun 07 12:48:45.470909 2017] [proxy:error] [pid 6:tid 140608362505984] (111)Connection refused: AH00957: AJP: attempt to connect to 127.0.0.1:8009 (127.0.0.1) failed apache | [Wed Jun 07 12:48:45.470967 2017] [proxy_ajp:error] [pid 6:tid 140608362505984] [client 172.17.0.1:41466] AH00896: failed to make connection to backend: 127.0.0.1 apache | 172.17.0.1 - - [07/Jun/2017:12:48:45 +0000] "GET / HTTP/1.1" 503 299

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

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

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

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

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

guest

回答1

0

ベストアンサー

Apache httpd と Tomcat が同じコンテナであれば、127.0.0.1:8009 で接続できますが、違うコンテナなのであれば、links: で紐付けている tomcat:8009 にするのではないでしょうか。

投稿2017/06/07 13:27

TaichiYanagiya

総合スコア12173

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

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

k-higa

2017/06/07 13:37

ProxyPass / ajp://tomcat:8009/でやってもうまくいきませんでした。 apacheのコンテナに環境変数でtomcatのコンテナのリンクが設定されていたので TOMCAT_PORT_8009_TCP=tcp://172.17.0.2:8009 ProxyPass / ajp://172.17.0.2:8009/ でやってみてもダメでした。。
TaichiYanagiya

2017/06/07 14:02

では、tomcat 側から調べていきましょう。 (1) tomcat コンテナ内から、"ss -tln", "netstat -tln" などで TCP 8009, 8080 番ポートが LISTEN しているか確認ください。 (2) 8080番ポートが有効であると仮定して、tomcat コンテナ内から "curl http://localhost:8080", "curl http://172.17.0.2:8080" でそれぞれ応答があるか、確認ください。 (3) Docker ホストおよび apache コンテナから "curl http://172.17.0.2:8080" で応答があるか、確認ください。
k-higa

2017/06/07 21:37

ss -tlnの結果 root@a7efcad209e4:/opt/apache-tomcat-8.0.33# ss -tln State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* LISTEN 0 100 :::8009 :::* ro 8009ポートはLISTENされているのですが、8080ポートはLISTENされていませんでした。 AJPの設定の際にsever.xmlの8080ポートの箇所をコメントアウトにしたからですかね? curlの結果はいずれも接続失敗になりました。 tomcatコンテナ root@a7efcad209e4:/opt/apache-tomcat-8.0.33# curl http://localhost:8080 curl: (7) Failed to connect to localhost port 8080: Connection refused root@a7efcad209e4:/opt/apache-tomcat-8.0.33# curl http://172.17.0.2:8080 curl: (7) Failed to connect to 172.17.0.2 port 8080: Connection refused root@a7efcad209e4:/opt/apache-tomcat-8.0.33# ホストマシン → tomcat KazuyukiMac:docker-apache k-higa$ curl http://172.17.0.2:8080 curl: (7) Failed to connect to 172.17.0.2 port 8080: Operation timed out apacheコンテナ → tomcat root@73b3b3ef4763:/usr/local/apache2# curl http://172.17.0.2:8080 curl: (7) Failed to connect to 172.17.0.2 port 8080: Connection refused
k-higa

2017/06/07 21:52

tomcatのserver.xmlを元に戻したら8080ポートもLISTENされてcurlも繋がるようになりました。 root@fc2c83052987:/opt/apache-tomcat-8.0.33# ss -tln State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* LISTEN 0 100 :::8009 :::* LISTEN 0 100 :::8080 :::*
TaichiYanagiya

2017/06/08 01:43

ありがとうございます。 8080番で apache から接続できるのであれば、8009番でも接続できそうなのですが、"ProxyPass / ajp://tomcat:8009/" に設定したときのエラーログは変化ありませんでしょうか?
k-higa

2017/06/08 13:28

ProxyPass / ajp://tomcat:8009/で接続できました!!! IP指定でも接続できました。 ProxyPass / ajp://172.17.0.2:8009/ tomcatの8080ポートを塞いでもAJPでうまく接続できるようになりました!! 色々ありがとうございます(T . T)! 調べ方などとても勉強になりました。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問