新しいubuntuデスクトップ18.04マシンにdocker
をインストールしましたが、インストールが完了した直後にホストでインターネット接続が失われました。具体的には、_ping 8.8.8.8
_はできますが、_ping www.google.com
_はできません。
エラーを再現する手順は次のとおりです。
編集:
クリーンインストールと私の状況の最も重要な違いは、私のマシンがローカルDNSサーバーを使用していることです。このDNSサーバーは、企業ネットワークの_172.17.100.3
_および_172.17.100.70
_に固定アドレスを持っています。
これまで読んだことから、問題はNetworkManager
が_docker0
_インターフェースを管理しようとしたことが原因であるorsomethingDockerのインストールプロセスでsystemd
解決機能が壊れます。 _systemd-resolve
_ はデフォルトで127.0.0.53を使用することに注意してください
これまでのところ、私は次のことを試みました:
nameserver 8.8.8.8
_の_/etc/resolv.conf
_のハードコーディングは機能しますresolv.conf
_は変更されません。/etc/NetworkingManager.conf
_からdnsmasq
を削除:ここに示すように、私はこのソリューションを使用しました https://github.com/moby/moby/issues/3615 。 ubuntu 16.04。 18.04の新規インストールにはこの行がないため、この修正はもう有効ではありません。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 ですが、私の場合は問題が解決しませんこれまでのところ機能するのは、Google DNSサーバーのアドレスを_resolv.conf
_にハードコーディングすることだけです。これは、私の考えではクリーンなアプローチではありません。起動時にこのプロセスを自動化する必要もありますが、これは気に入らない点です。
Dockerを備えた開発マシンでNetworkingManagerの問題を適切に修正するにはどうすればよいですか?
私のデフォルトの_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
_
おそらく関連している
ありがとう!
だからここにあなたの問題があります:
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には、自動選択プロセスからアドレス範囲を除外する単純なメカニズムがないため、問題を解決するには次の2つのことを行う必要があります。
まず、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 network create」中にDockerが選択するネットワークアドレス範囲に影響を与えるにはどうすればよいですか? を文書化します。
これには、システムに永続的な静的ルートを設定する必要があります。これは、Linuxディストリビューションによって異なります。