docker界面拆掉wifi網路
我在筆記型電腦上看到了這個問題:當我
docker run
使用 Docker 容器時,幾秒鐘後我的 WiFi 網際網路停止工作。我沒有乙太網連接來測試這方面的東西。我不知道如何解決這個問題,我看到我有 2 個與此問題相關的網路介面:
- wifi介面
wlp2s0
- 碼頭工人界面
docker0
一旦網路 I/O 在網路介面上啟動
docker0
,它就會在網路介面上停止wlp2s0
。我可以使用網路瀏覽器檢查這一點,因為當 Docker 容器正在執行時,我無法通過瀏覽器訪問任何網頁。我在 Docker 中看到了這個網路配置:
docker network list NETWORK ID NAME DRIVER SCOPE 5d408693425d bridge bridge local 2eba59b04a5f host host local f22b30d7782a none null local
使用時
ifconfig
我看到這個:docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:e5ff:fe8a:b85c prefixlen 64 scopeid 0x20<link> ether 02:42:e5:8a:b8:5c txqueuelen 0 (Ethernet) RX packets 9034 bytes 1228570 (1.2 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 9945 bytes 94278580 (94.2 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ... wlp2s0: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC> mtu 1500 inet 192.168.1.54 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2001:b07:6477:ebfa:e46f:631e:206c:8a9e prefixlen 64 scopeid 0x0<global> ether 04:d3:b0:ee:2f:b9 txqueuelen 1000 (Ethernet) RX packets 3771571 bytes 3664198427 (3.6 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2460874 bytes 1439515295 (1.4 GB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
停止執行的 docker 容器後,我不需要做
sudo ifconfig wlp2s0 up
任何事情。網際網路剛剛重新開始工作。在
/etc/docker
我只看到一個名為的文件key.json
,它看起來與網路設置無關(例如/etc/docker/daemon.json
,DNS 條目不存在)。在這個文件中
~/.docker/config.json
,我只看到一些對一些私有 Docker 系統資料庫的授權,與網路無關。還有一些我認為不相關的其他與令牌相關的文件:$ ls -a ~/.docker/ . .. .buildNodeID config.json .token_seed .token_seed.lock
如果我在執行 docker 容器後重新啟動 NetworkManager
sudo systemctl restart network-manager.service
,那麼我仍然無法使用我的瀏覽器或例如訪問網際網路ping 8.8.8.8
(但ping localhost
無論我是否正在執行或不是 Docker 容器,我都會繼續工作)。我還嘗試通過添加以下內容來更改 NetworkManager 配置(請參閱此處)
/etc/NetworkManager/NetworkManager.conf
:[keyfile] unmanaged-devices=interface-name:docker0
然後使用 重新啟動服務
sudo systemctl restart network-manager.service
。但效果是一樣的:在 Docker 容器啟動幾秒鐘後,通過 WiFi 無法訪問網際網路。但是,這可能與網路管理器的錯誤或配置錯誤有關,因為當我檢查服務日誌時,
service network-manager status
我會看到:May 05 08:49:05 my-host NetworkManager[1269565]: <info> [1620200945.9900] dhcp6 (wlp2s0): option dhcp6_name_servers => '2001:b07:6477:ebfa:aa2b> May 05 08:49:05 my-host NetworkManager[1269565]: <info> [1620200945.9900] dhcp6 (wlp2s0): state changed unknown -> bound May 05 08:49:06 my-host NetworkManager[1269565]: <info> [1620200946.2184] manager: startup complete May 05 08:53:43 my-host NetworkManager[1269565]: <info> [1620201223.6347] manager: (veth90dd212): new Veth device (/org/freedesktop/NetworkManage> May 05 08:53:43 my-host NetworkManager[1269565]: <info> [1620201223.6358] manager: (veth9cfce50): new Veth device (/org/freedesktop/NetworkManage> May 05 08:53:43 my-host NetworkManager[1269565]: <info> [1620201223.6374] device (veth90dd212): carrier: link connected May 05 08:53:43 my-host NetworkManager[1269565]: <info> [1620201223.6389] device (veth9cfce50): carrier: link connected May 05 08:53:43 my-host NetworkManager[1269565]: <info> [1620201223.6394] device (docker0): carrier: link connected May 05 08:55:29 my-host NetworkManager[1269565]: <info> [1620201329.0433] manager: (veth90dd212): new Veth device (/org/freedesktop/NetworkManage> May 05 08:55:29 my-host NetworkManager[1269565]: <info> [1620201329.0777] device (veth9cfce50): released from master device docker0
- 直到 08:53 一切都好:WiFi 工作正常,沒有 Docker 容器執行
- 在 08:53:43,我啟動了一個 Docker 容器,並且網路管理器連結到這兩個
docker0
介面以及由於我執行一個新的 Docker 容器而出現的其他一些臨時網路介面。網際網路無法訪問。- 在 08:55:29 我停止了 Docker 容器,然後網路管理器從
docker0
. 網際網路恢復正常:我又可以看到網頁了。這個問題發生在我的各種 Linux Ubuntu/Debian 版本和 Docker 版本上,無論如何我目前的設置是:
Ubuntu:
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal
碼頭工人:
$ docker --version Docker version 20.10.6, build 370c289
網路管理員:
$ /usr/sbin/NetworkManager --version 1.22.10 $ nmcli --version nmcli tool, version 1.22.10
我讀了幾次這個頁面https://docs.docker.com/network/bridge/並且我認為我的 Docker Bridge 正在工作,因為當我在我的筆記型電腦上執行這些 Docker 容器時,它們能夠訪問 Internet。然而,Docker 網站上的文件有點枯燥,我不確定如何深入解決這些網路問題。
- docker配置有什麼問題?
- 網路管理器是否有任何錯誤配置?
- 我必須做什麼才能使 2 個網路介面同時協同工作?
編輯:
在執行 Docker 容器之前:
$ ip route get 1.1.1.1 1.1.1.1 via 192.168.1.254 dev wlp2s0 src 192.168.1.54 uid 1000 cache
執行 Docker 容器後:
$ ip route get 1.1.1.1 1.1.1.1 dev vethf6c1790 src 169.254.198.92 uid 1000 cache $ ping 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. From 169.254.198.92 icmp_seq=1 Destination Host Unreachable ^C
vethf6c1790
當我執行一個新的 Docker 容器時,它總是顯示為一個新的網路介面。
事實證明,NetworkManager 試圖管理和分配一個 IP 地址給
veth*
網橋埠(我假設這與docker0
網橋有關)。在我呼叫啟動 Docker 容器後,所有這些
veth*
都出現在列表中。它們有一個不同的動態後綴標籤,但它們的前綴始終是.ifconfig``docker run``veth*
所以解決方案是要求網路管理器忽略這些網橋埠。
我
/etc/NetworkManager/NetworkManager.conf
在名稱上使用萬用字元添加到此配置veth*
:[keyfile] unmanaged-devices=interface-name:veth*
然後我重新啟動了 NetworkManager 服務:
sudo systemctl restart network-manager.service
之後,我能夠在網際網路上導航,同時讓 Docker 容器執行並監聽這些橋接埠,例如
vethf6c1790
.