Docker Desktop for Windows (4.32.0) を使っていて、コンテナ内からLAN内の別ホストへのpingが失敗するという症状に出遭っていました。Dockerコンテナのping話題はよく見かけますが、コンテナ内から外向きへの話題はあまり見かけないので、記載しておこうと思います。
コンテナ内でpingコマンドを使えるようにする
コンテナ内からpingすることができない状態のものが多いと思われます。権限のことを抜きにすれば、以下のコマンドでツールをインストールが必要です。名前解決もおそらく使う場面もあるでしょうから、セットでインストールしてしまいましょう。
apt install -y dnsutils iputils-ping
動作確認
コンテナ内から、名前解決やping が通ることを確認します。
root@33090ac32867:/# ping -c4 8.8.8.8
root@33090ac32867:/# nslookup www.yahoo.co.jp
本題:LAN内にpingが通らない
今回出遭った症状が、先に挙げたコマンド例は成功するが、LAN内の物理ホストやルーターに対して、ping が成功しないというものです。WAN側の各種サーバーには到達できるのに謎です。
またWSL2上のUbuntu環境からは、このようなことは発生せず、LAN/WANどちらにもpingは成功します。
以下の対応をしてみましたが、これでは解決せずです
- PC の再起動
- WSLの更新
- Docker Desktop for Windows のバージョン更新
- 4.32.0 -> 4.34
実施した対処法
色々諦めて、以下の手順を実行したところ、ようやく環境が戻りました。
- Docker Desktop のアンインストール
- WSL2 のアンインストール
- Windows 機能の無効化
- WSL2の再インストール, Ubuntu インストール
- インストール後、初回起動をしてユーザー設定を済ませる
- Docker Desktop のインストール
Windows 機能の無効化について
Windowsの「設定」から「システム/オプション機能」を開き、「Windows のその他の機能」の画面を開きます。
ここで、以下の項目のチェックを外して、PCを再起動します。(チェックが外れていたらそのままでOK)
- Hyper-V
- Linux 用 Windows サブシステム
- Windows サンドボックス
- Windowsハイパーバイザー プラットフォーム
- コンテナー
自分の場合には他のアプリケーション都合があるので、「仮想マシン プラットフォーム」は有効化したままにしています。
ソフトウェア各種を再インストールをする過程で、自動的に上記の機能が有効化設定となるので、それをアテにしています。
まとめ
とりあえず私の環境は復帰しました。検索してこのページを見たということであれば同じ問題に出遭っている貴方に、この記事が役に立つようであれば嬉しく思います。
原因など、思い当たる節など
色々と実験したり、ソフトウェアの更新をしてみたりと、環境の破損に繋がるようなことがあったのかもと思っています。
- WSL2
- バージョンの更新
- networkMode が使えるようになったときの試行錯誤の影響
- Ubuntu
- Docker DesktopでIntegrationしているUbuntuのリセット・アンインストール
コメント