Dockerでコンテナ内のプロセスからホストのプロセスに接続する方法


Linuxの話です。WindowsやMacでは以下の設定は不要らしい。
Docker単体で使う場合とDocker Composeを使う場合の2パターンを解説。

共通事項

以下の設定でhost.docker.internalがホストのアドレスに解決される。よってコンテナ内のプロセスからこのドメイン名に接続するとコンテナ外のホストのプロセスに接続できる(ホストは0.0.0.0等のアドレスで待ち受ける必要あり)。

Docker単体で使う場合

docker run --add-host host.docker.internal:host-gateway IMAGE

解説

--add-host でコンテナ内の/etc/hostsにエントリを追加できる。ここでhost-gatewayを名前解決先に指定するとホストのアドレスにしてくれる模様。

Docker Composeを使う場合

services:
  SERVICE:
    image: IMAGE
    extra_hosts:
      - host.docker.internal:host-gateway

解説

extra_hostsでコンテナ内の/etc/hostsにエントリを追加できる。ここでhost-gatewayを名前解決先に指定するとホストのアドレスにしてくれる模様。

あとがき

Docker Composeの場合はよく解説されているが、Docker単体の場合はあまり出てこなかったので一応書いた記事。