💬
WSL2でhost.docker.internalがconnection refusedになるとき
結論
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上で動いてるサービスはこの記事↓
みたいに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