背景

Dockerコンテナからインターネットに繋がらなくなった。

(以下より、Dockerコンテナ上で実行するコマンドを#, ホストPC上で実行するコマンドを$のprefixをつけて表現する)

IPアドレス, 経路確認

# ip route get 8.8.8.8
8.8.8.8 via 172.17.0.1 dev eth0 src 172.17.0.2 uid 0 
    cache

ipアドレスが 172.17.0.2 デフォルトの宛先が172.17.0.1であることがわかった

$ ip a
...
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:a4:ba:7d:47 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:a4ff:feba:7d47/64 scope link 
       valid_lft forever preferred_lft forever
...

172.17.0.1はdocker0であることがわかった

ネットワーク疎通確認 (コンテナから)

  1. コンテナからインターネットにつながるかを確認
# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2031ms
  1. コンテナからホストPCにつながるかを確認
# ping -c 3 172.17.0.1
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2031ms

ネットワーク疎通確認 (ホストPCから)

  1. ホストからインターネットにつながるかを確認
# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=55.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=10.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=10.3 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 10.304/25.417/55.401/21.202 ms
  1. ホストからコンテナにつながるかを確認
# ping -c 3 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
From 172.17.0.2 icmp_seq=1 Destination Host Unreachable
From 172.17.0.2 icmp_seq=2 Destination Host Unreachable
From 172.17.0.2 icmp_seq=3 Destination Host Unreachable

解決まで

コンテナ ↔ ホストPC 間のネットワークがダメそうなことがわかったので、経路を調べてみる

$ ip route get 172.17.0.2
172.17.0.2 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000 
    cache

CloudflareWARPにつながってしまっていることがわかった。 (CloudflareWARPはVPNサービスの名称)

今回は172.17.0.0/16 を Exclude IPsに指定することで解決した。