Edited at

docker-composeを使ってコンテナからホストマシンへのエイリアスを設定する方法

More than 1 year has passed since last update.

コンテナからDockerホスト(コンテナの親)マシンへ通信するための設定をdocker-compose.ymlで行う方法について。


設定サンプル

下記設定ファイルを配置してdocker-compose upを実行し、各コンテナのpingがホストマシンへ届いていることを確認してください。


version 2系


docker-compose.yml

version: '2'

networks:
default:
driver: bridge
ipam:
config:
# ネットワークのサブネットを指定
- subnet: '172.30.0.0/16'
gateway: '172.30.0.1'

services:
ping1: &ping
image: alpine
extra_hosts:
- dockerhost:172.30.0.1
command: /bin/ping -c 4 dockerhost

ping2: *ping

ping3: *ping



version 3系


docker-compose.yml

version: '3'

networks:
default:
driver: bridge
ipam:
config:
# ネットワークのサブネットを指定
- subnet: '172.30.0.0/16'

services:
ping1: &ping
image: alpine
extra_hosts:
- dockerhost:172.30.0.1
command: /bin/ping -c 4 dockerhost

ping2: *ping

ping3: *ping


v3系のdocker-composeファイル定義を見ると、configからgatewayプロパティが消えているため指定が効かず、正しく動作するかわからないのですが、私の環境ではなんとかなってます。


考え方

docker-compose up時に作成されるネットワークブリッジのサブネットアドレスは自動で決まるため、コンテナからホストへアクセスするのが難しくなっています。これを解消するため、サブネットアドレスを指定してやることで予めネットワークで使用されるIPを固定してやります。あとは、各コンテナの設定でhostsにdockerhostという名前のエイリアスを設定してやることで、いちいちDockerホストのIPを調べなくても名前でアクセスできるようにしています。