💬

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

2023/03/08に公開約1,000字

結論

Windowsで、docker/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-copose.yamlの階層に

docker-copose.override.yaml
version: '3.8'
services:
  service_name:
    extra_hosts:
    - "host.docker.internal:${LINUX_HOST_IP}"
.env
#...追記する
LINUX_HOST_IP=
update_linux_host_id.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_id.shを実行後にdocker runまたはdocker-compose upすればいい。

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

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

.git/info/exclude
#...追記する
update_linux_host_id.sh

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

chmod u+x update_linux_host_id.sh

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

Discussion

ログインするとコメントできます