WSL 内の Docker がネットに繋がらない
◆ WSL はネットにつながるのに Docker コンテナ内からはつながらない
◆ IP アドレスではアクセスできるので DNS 解決できてないみたい
◆ Docker に割り当てられる IP アドレス範囲を変えてみたら解決できた
◆ IP アドレスではアクセスできるので DNS 解決できてないみたい
◆ Docker に割り当てられる IP アドレス範囲を変えてみたら解決できた
ネットにつながらない
Docker コンテナ内に必要なコマンドが入っていなかったのでインストールしようとしたらエラーになりますネットにつながってないみたいです
原因を調べようにも Docker コンテナ用だと ps や curl や ping みたいな基本なコマンドも最初から入ってないイメージもあるんですよね
調べるツールを入れようにもネットにつながってないという詰み状態
Docker 全体の問題なのかもわかりませんが 仕方なく別のコンテナを起動して試してみました
すると同じくネットに繋がりません
こっちでは調べるのに必要なコマンドが最初からあるので 調べてみると IP で指定ではアクセスできました
ドメインだとダメのようです
このタイプの問題だと DNS サーバを 8.8.8.8 にすれば解決できることが多いですが できればデフォルトのままにしておきたいです
そもそも WSL 自体が繋がらないのかと思って確認してみると ここは問題ありませんでした
WSL 内の Docker コンテナ内でのみ起きています
以前 WSL ではないところですが 似たような問題が Docker デーモンの再起動で直ったことがあったので再起動してみましたが変わりません
対処
そういえば 以前どこかでこれと似た問題が起きるみたいなことを書いた記事を見た覚えがありますたしか WSL と Docker のネットワークが競合するようなことを書いていた気がします
「ip a」 コマンドでみてみるとたしかに重複しています
docker0 は 172.17.0.1/16 で WSL のネットワークはこの範囲の中にありました
docker に割り当てられる IP アドレスの範囲を変えてみます
調べたら 「/etc/docker/daemon.json」 の default-address-pools を指定すると良いらしいです
user@wsl-debian:~$ cat /etc/docker/daemon.json
{
"default-address-pools": [
{
"base": "172.30.0.0/16",
"size": 24
}
]
}
172.30.x.x にしてみました
これで Docker のデーモンを再起動して適当にコンテナを作ってみます
無事新しく指定した範囲内に割り当てられていました
WSL 側から 「ip a」 コマンドでみた結果も変わっています
user@wsl-debian:~$ ip a
(略)
11: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:b7:df:e8:db brd ff:ff:ff:ff:ff:ff
inet 172.30.0.1/24 brd 172.30.0.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:b7ff:fedf:e8db/64 scope link
valid_lft forever preferred_lft forever
ちなみに変更前はこれでした
user@wsl-debian:~$ ip a
(略)
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:59:ed:00:ac brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:59ff:feed:ac/64 scope link
valid_lft forever preferred_lft forever
肝心の DNS 解決ですが これも問題なくドメインでアクセスできるようになってました
WSL に割り当てられる IP アドレス範囲は環境によって変わるみたいなので この問題が起きる環境もあれば起きない環境もあるようです