1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dockerでサーバ間処理をローカル開発環境に構築しようとした時に躓いたこと

Last updated at Posted at 2019-03-04

dockerにてサーバ間処理を行えるようにローカル環境を構築。localhostに向けてAPIを叩いて値を取得しようとした矢先に、以下のようなエラーに遭遇。

サーバB上で"http://localhost:3000/(APIのURL)"にリクエスト
→Failed to connect to localhost port 3000: Connection refused

さてさて、困った^ ^;

環境

サーバA:APIサーバ(port:3000)
サーバB:フロントサーバ(port:4000)

サーバBがAPIを叩いて、サーバAへ処理をお願いする、そんなオーソドックスな構成です。

サーバの構成ファイルは別々のディレクトリで管理しています。

解決策

サーバBのdocker-compose.ymlにexternal_linksexternalという設定を入れて、サーバAと疎通が取れるようにしてあげました。

version: '3'
services:
  front:
    〜
    external_links:
      - (server_Aのサービス名)
〜
networks:
  default:
    external:
      name: (server_Aのネットワーク名)

そしてAPIのリクエストを以下のように変更します。

"http://(server_Aのサービス名):3000/(APIのURL)"

何が問題だったのか?

そもそもサーバBからlocalhostにリクエストを投げることは、サーバB自身にリクエストを投げることと同義なのです。ループバックアドレスになっちゃうので・・・

そのため、docker上で外部のサーバAにリクエストを飛ばせるように設定を加える必要が出てきます。

その設定がexternal_linksexternalとなるようです。

全体像.png

これで、サーバAのサービス名とポート番号を指定してリクエストを投げて上げることで、無事疎通ができるはずです^ ^

dockerは奥が深いですね。

この記事はあくまで自分の解釈で書いたものなので、本当はこうなんだよ〜というのがあればコメントいただけると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?