Dockerコンテナ内の名前解決をプライベートIPアドレスにする

  • Docker Engine 24.0
  • Docker Compose 2.21

プライベートDNSを運用しているネットワークで、 Dockerコンテナからネットワーク内の別のホストに通信したいとき、 デフォルトではGoogle Public DNS8.8.8.8でホスト名がグローバルIPアドレスに解決されるため、 ISPやCloudflare Tunnelなどの外部を経由して通信することになり、非効率で危険な通信経路になります。

また、IPアドレスによるアクセス制限を設けている場合、 プライベートIPアドレスがソースとなる通信になるように通信経路を制御したい場合があります。

以下の設定により、コンテナ内でexample.com192.168.0.50に解決されるようになります。

Docker

sudo docker run --rm --add-host "example.com:192.168.0.50" hello-world

Docker Compose

services:
app:
image: hello-world
extra_hosts:
- "example.com:192.168.0.50"