3

Я установил docker на новую машину с Ubuntu для настольных компьютеров 18.04 и сразу же после завершения установки потерял подключение к Интернету на хосте. В частности, я могу ping 8.8.8.8 но не могу ping www.google.com .

Шаги для воспроизведения ошибки следующие:

  1. Установите Ubuntu 18.04
  2. Установите docker-ce, используя локальный DNS-сервер.

РЕДАКТИРОВАТЬ:

Самое важное различие между чистой установкой и моей ситуацией заключается в том, что моя машина использует локальный DNS-сервер, который имеет фиксированный адрес 172.17.100.3 и 172.17.100.70 в корпоративной сети.

Из того, что я прочитал, проблема связана с попыткой NetworkManager управлять интерфейсом docker0 или что-то в процессе установки docker нарушает возможности systemd разрешения. Обратите внимание, что systemd-resolve использует 127.0.0.53 по умолчанию

До сих пор я пытался сделать следующее:

Пока единственное, что работает, - это жесткое кодирование адреса сервера 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

Вероятно, связано

Спасибо!

PS: я открыл вопрос в форумах докеров с той же информацией https://forums.docker.com/t/cant-access-internet-after-install-docker-in-a-fresh-ubuntu-18- 04-машина /53416

1 ответ1

1

Итак, вот ваша проблема:

Docker назначил диапазон 172.17.0.1/16 вашему интерфейсу docker0 . Это включает в себя все адреса с 172.17.0.1 по 172.17.255.255 . Вы заметите, что в этот диапазон входят ваши DNS-серверы (172.17.100.3 и 172.17.100.70). Что у вас есть проблема маршрутизации:

Всякий раз, когда вам требуется хост для доступа к вашим DNS-серверам, он видит, что у него уже есть интерфейс в той же сети (docker0), поэтому он пытается маршрутизировать пакеты с использованием этого интерфейса ... которые, конечно, никуда не ведут , поэтому ваш DNS останавливается за работой.

В Docker нет простого механизма исключения диапазона адресов из процесса автоматического выбора, поэтому вам, вероятно, потребуется решить две проблемы:

Во-первых, явно установите адрес docker0 в вашем /etc/docker/daemon.json . Используйте любую сеть, которая не конфликтует с вашими внутренними сетями. Например:

{
  "bip": "172.31.0.1/16"
}

Вам нужно будет перезапустить Docker.

Затем, чтобы Docker не мог выбрать тот же диапазон сети для определенной пользователем сети (тот, который вы создаете явно с помощью docker network create или неявно с помощью, например, docker-compose или docker stack ...), создайте новую сеть и затем никогда используй это:

docker network create --subnet 172.17.0.0/16 --config-only do_not_use

Это должно как решить вашу проблему, так и предотвратить ее обрезку в будущем.

Обновить

На самом деле Docker документирует возможно лучший способ сделать это в разделе Как повлиять на то, какие диапазоны сетевых адресов выбирает Docker во время «создания сети Docker»? ,

Это требует установки постоянных статических маршрутов в вашей системе, которые различаются в разных дистрибутивах Linux.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .