@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

複数のdocker compose間で通信する

tl;dr

通信元のdocker-compose.ymlに通信先ネットワークの情報を書けばよい

  • 通信元
version: '3'
services:
  src_app:
    # ...
    networks:
      - target_network
networks:
  target_network:
    external:
      name: actual_network_name
  • 通信先
version: '3'
services:
  dst_app:
    # ...
    ports:
      - 8080:3000
    networks:
      - my_app
networks:
  my_app:
    external:
      name: actual_network_name

この状態で通信元のコンテナ(src_app)内からは target_network という名前で通信先に接続できる

curl http://target_network:8080/

みたいな感じ

背景とか

f:id:peccu:20220114194629p:plain
概要図

docker-composeで複数コンテナを束ねたアプリケーションがあり、そのアプリケーションを利用したい別のアプリケーションもまた同じホスト上にdocker-composeで構築されている状況。

Docker上のネットワークを作り、それが外部にあるものとして参照すればよいみたいで、docker-compose.ymlでネットワーク名書いておけばよかった。

StackOverflowに書いてたけどどっちからどっちにつなごうとしてるのかわかりにくかったのでまとめた

stackoverflow.com