2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerのコンテナ同士をネットワーク接続できるようにする(extra-hosts & host-gateway)

Last updated at Posted at 2023-09-09

はじめに

コンテナ同士で通信するときに、docker composeで 1つのymlでコンテナ構築したり、あとからdocker networkで設定入れる必要があると思っていたのですが、コンテナ構築時にextra-hosts で簡単に追加設定できることを知りました。。。
もうちょっと早くに知りたかったという自戒も込めてメモ残しです。。。

確認環境

  • windows10 pro
  • wsl2(20.04.5 LTS (Focal Fossa))
  • Dockerのバージョン
    • Docker version 20.10.18, build b40c2f6
    • docker-compose version 1.29.2, build 5becea4c
      ※Docker Desktop ではありません

構成イメージ図

extrahost.png

設定方法例

コンテナA
services:
  app:
    image: tempimage1
    # ↓ リクエストする側に以下の設定を入れる
    extra_hosts:
      - host.docker.internal:host-gateway 
コンテナB
services:
  app:
    image: tempimage2
    # 受信ポート指定
    ports:
      - 50001:50000

設定概要

  • host.docker.internalについては、ホスト名で使える文字列なら何でもよいが、公式のドキュメントでこの名前がつかわれているので、特に変更する必要はないかと
  • 上記の設定を共通で入れていると、コンテナ内部で (上記の場合であれば、host.docker.internal:50001)で通信できる
  • 外部と内部で違う場合は、外部から接続できるポート番号を指定する
  • 上記からわかることではあるが、ports等で外部から接続できる設定についてはやり取り可能ではあるが、expose 設定のようにDocker内部のみの接続設定のみを可能にしている場合は、この設定で通信することはできない(この場合はnetworkグループの設定が必要)
  • ちゃんと設定が入っているかを確認するときは、コンテナ内で cat /ect/hosts を実行し、ファイルに設定が追加されていれば問題ない
    $ cat /etc/hosts
    
    127.0.0.1       localhost
    <省略...>
    172.17.0.1      host.docker.internal
    172.30.0.2      f5e65b3fb6ae
    

余談

socket通信でbindするときのIP設定で、0.0.0.0 を使っていたが、 環境変数の hostname を使用すると内部のIPで名称解決できる(上記のf5e65b3fb6aeが設定されている)ので、このあたりもうまく使っていきたい

さいごに

知らなくても何とかなっていたが、効率的に管理できる仕組みは積極的に取り入れないと…と思っている次第です。。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?