docker 接口破坏了 wifi 互联网

docker 接口破坏了 wifi 互联网

我在我的笔记本电脑上看到这个问题:当我使用docker runDocker 容器时,几秒钟后我的 WiFi 互联网停止工作。我没有以太网连接来测试这方面的事情。

我不知道如何解决这个问题,我看到我有 2 个与此问题相关的网络接口:

  • 无线网络接口wlp2s0
  • 码头工人界面docker0

一旦网络 I/O 在网络接口上启动docker0,它就会在网络接口上停止wlp2s0。我可以使用 Web 浏览器进行检查,因为当 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

sudo ifconfig wlp2s0 up停止运行的 docker 容器后,我不需要做任何事情。互联网又开始工作了。

/etc/docker我只看到一个名为 的文件key.json,该文件看起来与网络设置无关(例如/etc/docker/daemon.jsonDNS 条目,但它不存在)。

在这个文件中,~/.docker/config.json我只看到对某些私有 Docker 注册表的一些授权,与网络无关。还有一些其他与令牌相关的文件,我认为这些文件不相关:

$ ls -a ~/.docker/
.  ..  .buildNodeID  config.json  .token_seed  .token_seed.lock

如果我sudo systemctl restart network-manager.service在运行 docker 容器后重新启动 NetworkManager,那么我仍然无法使用我的浏览器或例如访问互联网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 版本上都会遇到这个问题,无论如何我当前的设置是:

乌班图:

$ 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 容器时,它们能够访问互联网。然而,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 容器时,它总是显示为新的网络接口。

答案1

事实证明,NetworkManager 尝试管理 IP 地址并将其分配给网桥端口(我假设这与网桥veth*有关)。docker0

在我调用启动 Docker 容器后,所有这些veth*都出现在列表中。它们具有不同的动态后缀标签,但它们的前缀始终为。ifconfigdocker runveth*

所以解决办法是要求网络管理器忽略这些桥接端口

/etc/NetworkManager/NetworkManager.conf在名称上添加了通配符到此配置veth*

[keyfile]
unmanaged-devices=interface-name:veth*

然后我重新启动 NetworkManager 服务:sudo systemctl restart network-manager.service

完成此操作后,我能够在运行 Docker 容器并侦听这些桥接端口(如vethf6c1790.

相关内容