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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

Q&A

解決済

1回答

5114閲覧

docker-composeで複数のRailsアプリを連携させるには?

indi

総合スコア26

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

0グッド

0クリップ

投稿2020/07/02 10:43

編集2020/07/02 10:44

やりたいこと

docker-composeで管理しているRailsアプリのapp_aからapp_bのweb apiを叩きたいです。

アプリ構成

app_a/ docker-compose.yml app/ app_b/ docker-compose.yml app/

現状

  • app_a(localhost:3000), app_b(localhost:3001)を同時に立ち上げができる(それぞれは動作している)。

app_a からapp_bへのapiリクエストを叩くとエラーが発生する。

エラー内容

ruby

1uri = URI.parse("localhost:3001/myapi") 2Net::HTTP.start(uri.host, uri.port) # apiを叩く 3Errno::EADDRNOTAVAIL: Failed to open TCP connection to localhost:3001 (Cannot assign requested address - connect(2) for "localhost" port 3001) 4from /usr/local/lib/ruby/2.6.0/net/http.rb:949:in `rescue in block in connect' 5Caused by Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 3001 6from /usr/local/lib/ruby/2.6.0/net/http.rb:947:in `initialize'

やったこと

https://qiita.com/rh_taro/items/5d35b1e54b5eb7becf65 を参考にapp_aとapp_bの通信を可能な状態にしました。

app_aのdocker-compose.yml

services: app: ports: - "3000:3000" networks: - mynetwork - default networks: mynetwork: external: true

app_bのdocker-compose.yml

services: app: ports: - "3001:3000" networks: - mynetwork - default networks: mynetwork: external: true

どのようにしたらapp_aからapp_bのlocalhost:3001/myapiを叩くことができるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのようにしたらapp_aからapp_bのlocalhost:3001/myapiを叩くことができるでしょうか?

app_aから見たapp_bはlocalhostではなく、コンテナ名でアクセスします。
localhostはホストから見た時に使用します。
なので、仮にコンテナ名がapp_b_app1の場合は、http://app_b_app1:3000でアクセスします。

ポートが3001ではない理由は、localhostと同じようにホスト(外部)からアクセスする際のポートであり、内部(コンテナネットワーク)から直接アクセスする場合は、コンテナのポートでアクセスできます。

投稿2020/07/02 13:56

comefigo

総合スコア1045

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

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

indi

2020/07/03 03:15

なるほどよく理解できました、ありがとうございます。
comefigo

2020/07/03 04:28

無事解決されてよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問