💬

WSL2でhost.docker.internalがconnection refusedになるとき

2023/03/09に公開

結論

Windowsで、docker-composeでhost.docker.internalがつながらないとき、

docker-copose.override.yaml
version: '3.8'
services:
  service_name:
    extra_hosts:
    - "host.docker.internal:host-gateway"

って書けっていうのをよく見かけるが、これはWindowsホスト上で動いてるサービスに接続する場合みたい。
WSL2上で動いてるサービスはこの記事↓
https://zenn.dev/datsukan/articles/a479f3e98a70c4
みたいにdocker-compose.yamlの階層に

docker-compose.override.yaml
version: '3.8'
services:
  service_name:
    extra_hosts:
    - "host.docker.internal:${LINUX_HOST_IP}"
.env
# 既にファイルがある場合は追記する
# Shellスクリプトが自動的に更新してくれるので、=の後に自分で調べて書き足す必要はない
LINUX_HOST_IP=
update_linux_host_ip.sh
#!/bin/bash

ip=$(hostname -I)
sed -i -e "/^LINUX_HOST_IP=/s/LINUX_HOST_IP=.*/LINUX_HOST_IP=${ip[0]% }/g" .env

を作って.\update_linux_host_ip.shを実行後にdocker-compose upすればいい。

おまけ:自分だけ.gitignoreする方法

.gitignoreに書かずに、自分だけ.gitignoreする場合は.git/info/excludeにパスを追記する。

.git/info/exclude
# 追記する
docker-compose.override.yaml
update_linux_host_ip.sh
.env

おまけ:シェルスクリプトに実行権限を持たせる方法

chmod u+x update_linux_host_ip.sh

を実行する。ちなみにchmodはchange mode、uがユーザー、xが実行権限って意味で、ユーザー(u)に実行権限(x)を付与(+)って意味らしい、って今日初めて知った。

Discussion