내 노트북에서 이 문제가 발생했습니다. Docker 컨테이너를 사용할 때 docker run
Wi-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 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 버전에서 이 문제가 발생합니다. 어쨌든 현재 설정은 다음과 같습니다.
우분투:
$ 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*
목록에 나타납니다. 동적 접미사 태그가 다르지만 접두사는 항상 입니다.ifconfig
docker run
veth*
그래서 해결책은네트워크 관리자에게 이 브리지 포트를 무시하도록 요청하세요..
/etc/NetworkManager/NetworkManager.conf
이 구성의 이름에 와일드카드를 추가 했습니다 veth*
.
[keyfile]
unmanaged-devices=interface-name:veth*
그런 다음 NetworkManager 서비스를 다시 시작했습니다.sudo systemctl restart network-manager.service
이 작업을 수행한 후 Docker 컨테이너를 실행하고 vethf6c1790
.