Docker

docker界面拆掉wifi網路

  • May 5, 2021

我在筆記型電腦上看到了這個問題:當我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
  1. 直到 08:53 一切都好:WiFi 工作正常,沒有 Docker 容器執行
  2. 在 08:53:43,我啟動了一個 Docker 容器,並且網路管理器連結到這兩個docker0介面以及由於我執行一個新的 Docker 容器而出現的其他一些臨時網路介面。網際網路無法訪問
  3. 在 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.

引用自:https://unix.stackexchange.com/questions/648084