前提・実現したいこと
あるコンテナに入ったAPIアプリがあります。それとは別のコンテナにもう一つアプリがあり、curlコマンドでAPIアプリから情報をとりたいです。
しかし別々のdocker-compose.ymlファイルで立ち上げている為、curlコマンドでアクセスしても拒否されてしまいます。
色々調べたのですが何が足りないのか分からず詰まっています汗
お忙しい中申し訳ないのですが、コンテナ同士のAPI通信についてご指摘頂けないでしょうか、、
ディレクトリ構造
root ┣ front(localhost:4000) ┃ ┝ docker-compose.yml ┃ ┗ Dockerfile ┃ ┣ api(localhost:3000)←API提供 ┃ ┝ docker-compose.yml ┃ ┗ Dockerfile ┃ ┃
それぞれのアプリをdockerで立ち上げ、ブラウザで表示するとこまでは出来ています。試しにfront
コンテナに入りターミナルで以下のように入力するとアクセス拒否されます。
curl http://localhost:3000
(←api提供側はlocalhost:3000で立ち上げている)
発生している問題・エラーメッセージ
curl: (7) Failed to connect to localhost port 4000: Connection refused
該当のソースコード
##front側
docker-compose.yml
version: '3' services: app: build: context: . env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/webapp - public-data:/webapp/public - tmp-data:/webapp/tmp - log-data:/webapp/log depends_on: - db networks: - default - common_link db: image: mysql:5.7 env_file: - ./environments/db.env volumes: - db-data:/var/lib/mysql web: build: context: containers/nginx volumes: - public-data:/webapp/public - tmp-data:/webapp/tmp ports: - 4000:80 depends_on: - app tty: true stdin_open: true networks: - default - common_link networks: common_link: external: true
###api側
docker-compose.yml
version: '3' services: app: build: context: . env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/new_reserve_app - public-data:/new_reserve_app/public - tmp-data:/new_reserve_app/tmp - log-data:/new_reserve_app/log depends_on: - db networks: - default - common_link db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root volumes: - db-data:/var/lib/mysql web: build: context: containers/nginx volumes: - public-data:/new_reserve_app/public - tmp-data:/new_reserve_app/tmp ports: - 3000:80 depends_on: - app tty: true stdin_open: true networks: - default - common_link networks: common_link: external: true
試したこと
それぞれのdocker-compose.yml
に共通のnetworks
を作成し記述しました。そしてアプリ同士が通信できているかping
コマンドで確かめ反応が返ってきていました。
参考記事:https://qiita.com/reneice/items/20e981062b093264cd0a
↑
この記事の方法2を試しnetworkが繋がっていることを確認しました。
ですがcurlでアクセスしようとすると拒否されます。
ターミナルでdocker network inspect common_link
と入力しネットワークとして設定されているか確認しました。 common_link←作成したネットワーク
"Containers": { "704ed7a7d7d02f50502e41e0766dca25fb4e7ad48d7f8df5279f2ce35fcf3b6c": { "Name": "smart_yoyaku_portal_site_web_1", "EndpointID": "53be8c51f64bdf27342b58a20455ec2da495552f6dd5c71d7da0d53657b61878", "MacAddress": "02:42:ac:1b:00:04", "IPv4Address": "172.27.0.4/16", "IPv6Address": "" }, "a89a516f6ea3f247a4b71ecdc10de62e6ad25f5c15d86730458f2ed1f3104206": { "Name": "smart_yoyaku_portal_site_app_1", "EndpointID": "17b2f4c754bab34d78360a3a6d34dd2c32bf179f33a23dd1fe67fef7de5955c9", "MacAddress": "02:42:ac:1b:00:02", "IPv4Address": "172.27.0.2/16", "IPv6Address": "" }, "d142b963f89d9d44f70f2f6f2aba830d2a7ac7250e91078de7decb0bf4321307": { "Name": "new_reserve_app_web_1", "EndpointID": "c6a26711717d58d837370c0e8a084771a92e412f9c6977577b6a749cea437126", "MacAddress": "02:42:ac:1b:00:05", "IPv4Address": "172.27.0.5/16", "IPv6Address": "" }, "f3457c9ee486be1f97161e2e6bcda98c6478ec0b28c9c35ad9c4599f8fa491a1": { "Name": "new_reserve_app_app_1", "EndpointID": "6309986647cb6c0a745c0a85debb4c21a9a5d2d787dd08a33dea245dbdbaa5a0", "MacAddress": "02:42:ac:1b:00:03", "IPv4Address": "172.27.0.3/16", "IPv6Address": "" }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/10 11:37
2020/09/10 15:33
2020/09/10 18:33 編集
2020/09/11 00:15
2020/09/11 16:01 編集
2020/09/11 16:16
2020/09/12 06:41 編集