環境
- Linux(CachyOS 6.18.2-3-cachyos)
- Docker 29.1.3
- VSCode 1.107.1
- ルーター:OPNsense 25.7.6 (上位ルーターあり)
- DNS:OPNsense内のUnbound DNS
- VXLAN利用により実効MTU1450
発生した現象
- Dev Containers内にだけVSCode拡張機能のインストールが失敗する
- GUIで具体的なエラーなどは出ずに拡張機能のインストールの終わらない状態が続く
一方で、以下の場合では成功
- ホスト側の通常VSCode
- Wi-Fi接続の場合 (上位ルーター直)
- 別PC Windows+VPN+OPNsense内Unbound DNS
切り分け
最初はDNS、ファイアウォールやIPv6を疑いましたが、Windows + VPNでも成功するためDNS や OPNsense 自体は原因ではないと判断しました。
失敗するのは 「Linux + Docker + Dev Containers + 特定ネットワーク経路」だけという点に注目しました。
原因
DockerブリッジのMTUを確認したところ1500でした。そのため、ネットワークの実効MTUとの不整合によりDev Containerの通信のみが失敗していたようです。
$ ip link show
# 該当出力
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
解決策
ネットワークに合わせてMTUを1450にすることで正常に拡張機能のインストールが完了するようになりました。
/etc/docker/daemon.json (デフォルトでは存在しないため新規作成)
{
"mtu": 1450
}
Docker再起動
sudo systemctl restart docker.service
確認
MTUが1450になっていれば設定変更が成功しています。
$ ip link show
# 該当出力
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1450 qdisc noqueue state DOWN mode DEFAULT group default
この状態でDev Containerに接続し、拡張機能が正常にインストールされれば完了です。
おわりに
何らかの理由でMTUを変更している場合には同じ問題にハマる可能性がありそうです。あまり多くはないパターンかもしれませんが、Dev Containersだけ通信が不安定な場合、DNSやFirewallを疑う前にDockerブリッジのMTUを確認する価値がありそうです。