Я установил docker
на новую машину с Ubuntu для настольных компьютеров 18.04 и сразу же после завершения установки потерял подключение к Интернету на хосте. В частности, я могу ping 8.8.8.8
но не могу ping www.google.com
.
Шаги для воспроизведения ошибки следующие:
- Установите Ubuntu 18.04
- Установите docker-ce, используя локальный DNS-сервер.
РЕДАКТИРОВАТЬ:
Самое важное различие между чистой установкой и моей ситуацией заключается в том, что моя машина использует локальный DNS-сервер, который имеет фиксированный адрес 172.17.100.3
и 172.17.100.70
в корпоративной сети.
Из того, что я прочитал, проблема связана с попыткой NetworkManager
управлять интерфейсом docker0
или что-то в процессе установки docker нарушает возможности systemd
разрешения. Обратите внимание, что systemd-resolve
использует 127.0.0.53 по умолчанию
До сих пор я пытался сделать следующее:
- Hardcoding nameserver
nameserver 8.8.8.8
в/etc/resolv.conf
работает - Удаление Docker решает эту проблему. Установка / удаление докера не меняет
resolv.conf
. - Удаление
dnsmasq
из/etc/NetworkingManager.conf
: я использовал это решение, как показано здесь https://github.com/moby/moby/issues/36153, которое показывает ту же проблему в Ubuntu 16.04. Моя новая установка 18.04 не имеет этой строки, так что это исправление больше не действует. - Документы Docker предлагают полностью отключить или удалить
NetworkManager
как показано в https://docs.docker.com/install/linux/linux-postinstall/#dns-resolver-found-in-resolvconf-and-containers-cant-use-it, но Я не уверен, относится ли это к моей проблеме. Я также не знаю, сломает ли это другие вещи. - Это предполагает отключение управления для
docker0
https://gist.github.com/lanrat/458066dbdeb460b9cef40dc2af639a24, но это не решает проблему в моем случае - Этот подход предполагает что-то другое https://github.com/moby/moby/issues/32836, но я считаю, что это не связано с этой проблемой
Пока единственное, что работает, - это жесткое кодирование адреса сервера Google DNS в resolv.conf
, что, на мой взгляд, не является чистым подходом. Я также должен автоматизировать этот процесс при запуске, что мне не нравится.
Как правильно решить проблему NetworkingManager на машине для разработки, на которой установлен докер?
Текущая среда
Мой default resolv.conf
имеет
nameserver 127.0.0.53
и systemd-resolve --status
возвращает (я проверил с коллегой, и у нас есть тот же вывод)
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 4 (docker0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 3 (eno1)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 172.17.100.3
172.17.100.70
Link 2 (eno2)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
ifconfig docker0
bluesmonk@laptop:/etc/NetworkManager$ ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:86:e0:f0:94 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
и статус службы docker service
$ sudo service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-07-03 10:17:35 -04; 4min 52s ago
Docs: https://docs.docker.com
Main PID: 14992 (dockerd)
Tasks: 31
CGroup: /system.slice/docker.service
├─14992 /usr/bin/dockerd -H fd://
└─15015 docker-containerd --config /var/run/docker/containerd/containerd.toml
jul 03 10:17:32 laptop dockerd[14992]: time="2018-07-03T10:17:32.981563020-04:00" level=warning msg="Your kernel does not support swap memory limit"
jul 03 10:17:32 laptop dockerd[14992]: time="2018-07-03T10:17:32.981595408-04:00" level=warning msg="Your kernel does not support cgroup rt period"
jul 03 10:17:32 laptop dockerd[14992]: time="2018-07-03T10:17:32.981603807-04:00" level=warning msg="Your kernel does not support cgroup rt runtime"
jul 03 10:17:32 laptop dockerd[14992]: time="2018-07-03T10:17:32.982040899-04:00" level=info msg="Loading containers: start."
jul 03 10:17:34 laptop dockerd[14992]: time="2018-07-03T10:17:34.403909997-04:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used
jul 03 10:17:35 laptop dockerd[14992]: time="2018-07-03T10:17:35.083366302-04:00" level=info msg="Loading containers: done."
jul 03 10:17:35 laptop dockerd[14992]: time="2018-07-03T10:17:35.458766295-04:00" level=info msg="Docker daemon" commit=9ee9f40 graphdriver(s)=overlay2 version=18.03.1-ce
jul 03 10:17:35 laptop dockerd[14992]: time="2018-07-03T10:17:35.458857295-04:00" level=info msg="Daemon has completed initialization"
jul 03 10:17:35 laptop dockerd[14992]: time="2018-07-03T10:17:35.470042819-04:00" level=info msg="API listen on /var/run/docker.sock"
jul 03 10:17:35 laptop systemd[1]: Started Docker Application Container Engine.
lines 1-20/20 (END)
Связанные с моей машиной
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Wed Jun 20 21:43:51 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Wed Jun 20 21:42:00 2018
OS/Arch: linux/amd64
Experimental: false
Информация о докере:
docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 18.03.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-23-generic
Operating System: Ubuntu 18.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 31.38GiB
Name: bluesmonk-ubuntu
ID: FRUH:57KI:POWV:EAHH:CY6Y:J3UH:OWBH:AIYF:BONF:DH4Q:5Y2P:RZ6T
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
о дистрибутиве
$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
NAME="Ubuntu"
VERSION="18.04 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Вероятно, связано
- https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
- https://github.com/moby/moby/issues/23910
- https://stackoverflow.com/questions/35693117/how-can-i-give-docker-containers-access-to-a-dnsmasq-local-dns-resolver-on-the-h
Спасибо!
PS: я открыл вопрос в форумах докеров с той же информацией https://forums.docker.com/t/cant-access-internet-after-install-docker-in-a-fresh-ubuntu-18- 04-машина /53416