도커 인터페이스가 Wi-Fi 인터넷을 끊습니다.

도커 인터페이스가 Wi-Fi 인터넷을 끊습니다.

내 노트북에서 이 문제가 발생했습니다. Docker 컨테이너를 사용할 때 docker runWi-Fi 인터넷이 몇 초 후에 작동을 멈춥니다. 이 측면을 테스트하기 위해 이더넷 연결이 없습니다.

이 문제를 해결하는 방법을 모르겠습니다. 이 문제와 관련된 2개의 네트워크 인터페이스가 있습니다.

  • 무선 네트워크 인터페이스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

sudo ifconfig wlp2s0 up실행 중인 Docker 컨테이너를 중지한 후에는 아무 작업도 수행할 필요가 없습니다. 인터넷이 다시 작동하고 있습니다.

네트워크 설정과 관련이 없는 것처럼 보이는 /etc/docker파일만 표시됩니다 ( DNS 항목과 같지만 존재하지 않음).key.json/etc/docker/daemon.json

이 파일에는 ~/.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 localhostDocker 컨테이너 실행 여부에 관계없이 계속 작동합니다).

또한 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 컨테이너를 실행할 때 인터넷에 액세스할 수 있기 때문에 Docker Bridge가 작동한다고 생각합니다. 그러나 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.

관련 정보