Lösungen für das Problem, dass Docker den Host nicht anpingen kann: 1. Ändern Sie daemon.json; 3. Ändern Sie sysctl.conf; 4. Setzen Sie die Netzwerkbrücke zurück.
Die Betriebsumgebung dieses Artikels: Ubuntu16.04-System, Docker 20.10.11, Dell G3-Computer.
Was soll ich tun, wenn Docker den Host nicht anpingen kann?
Der Docker-Bridge-Modus kann den Host nicht anpingen In vier Typen unterteilt, ist der Standardwert der einzelne Bridge-Modus, wenn wir ihn nicht festlegen. Der Container verwendet einen unabhängigen Netzwerk-Namespace
und ist mit dem docker0 verbunden
virtuelle Netzwerkkarte. Kommunizieren Sie mit dem Host über die docker0
-Bridge und die Iptables nat
-Tabellenkonfiguration.
Testen Sie zu diesem Zeitpunkt auf der Bastion-Maschine und verwenden Sie busybox
zum Testen:
# 拉取镜像 docker pull busybox # 运行容器 docker run -itd --name busy_bridge busybox
docker network inspect Bridge
, um das Netzwerk anzuzeigen: docker
neu und können dann eine Verbindung herstellen. Dies liegt normalerweise daran, dass eine bestimmte Konfiguration geändert wird und der Neustart dann funktioniert hier. Welche Wirkung. Es gibt mehrere allgemeine Änderungen, bitte probieren Sie sie unten einzeln aus:Docker
网络模式分为四种,一般我们不设置时默认为bridge
单桥模式,容器使用独立的network Namespace
,并连接到docker0
虚拟网卡中。通过docker0
网桥以及Iptables nat
表配置与宿主机通信。busybox
进行测试:{"bip":"172.16.10.1/24"}
指令docker network inspect bridge
查看网络:
网路配置成功,进入容器内部,查看ip
,可以看到已经分配ip
,但是ping
外部网络时失败,无法连接外部网络:
但是在自己本地或者阿里云上进行相同的测试发现能够连通网络,这是什么问题导致的呢?
在网上找了一个资料后很多都是重启docker
,然后就能连上了,一般是因为修改了某个配置然后重启起作用,这里并没有什么作用。一般修改的分为几种,以下一一试验:
daemon.json
容器无法访问宿主机是因为网桥分配的网段和宿主机冲突了,需要修改daemon.json
进行指定分配,使用指令vim /etc/docker/daemon.json
进入后添加:
WARNING: IPv4 forwarding is disabled WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
虽然重启docker
并创建容器即可访问,但是,原本堡垒机和容器分配的ip
一点冲突也没有,该方法不行。
容器无法通过网桥访问宿主机,也就无法访问外网,可能是防火墙阻止访问,可以关闭防火墙或者开启某个端口。在服务器上测试,开启防火墙,发现容器确实无法访问百度首页也确实无法访问宿主机,在关闭防火墙并重启docker
后,容器就能正常访问了。
但是,堡垒机上的防火墙原本就是关闭的,该方法也没用。
sysctl.conf
docker
主机内部网络正常,与其它主机的连接失效,其它主机不能连接docker
主机上映射的端口,docker
内部也无法连接外部主机,利用docker info
指令查看信息发现报错如下:
net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-arptables=1 net.ipv4.ip_forward=1
使用指令vim /etc/sysctl.conf
编辑配置文件,在文件中增加以下代码:
service docker stop
然后使用指令systemctl restart network
重启网络,再次查看docker info
,警告消失。但是依旧没有用,堡垒机上的容器还是无法通过网桥访问宿主机,无法访问外网。
在使用指令yum install bridge-utils
安装工具后,利用brctl show
查看网桥,可以发现:
利用docker network create [网桥名]
指令新建网桥发现其生成的bridge id
还是8000.0000000000
,在新网桥上创建容器,再次查看并没有什么变化,说明很可能是网桥的问题。
再次测试,此时网桥ip
为172.17.0.1
,容器ip
为172.0.0.2
,发现宿主机能ping
Ändern Sie daemon.json
daemon.json
ändern, um die Zuteilung anzugeben. Verwenden Sie den Befehl vim /etc/docker /daemon.json
Später hinzugefügt: 🎜brctl addbr br0
docker
und das Erstellen eines Containers zugänglich ist, gibt es überhaupt keinen Konflikt zwischen der ip code> wird vom ursprünglichen Bastion-Host und dem Container zugewiesen, sodass diese Methode nicht funktioniert. 🎜<ol start="2"><li>🎜Schalten Sie die Firewall aus🎜</li></ol>🎜 Der Container kann nicht über die Bridge auf den Host zugreifen und daher nicht auf das externe Netzwerk zugreifen. Die Firewall blockiert möglicherweise Zugriff, damit Sie die Firewall ausschalten oder einen Port öffnen können. Auf dem Server getestet, die Firewall aktiviert und festgestellt, dass der Container tatsächlich nicht auf die Baidu-Homepage und den Host zugreifen konnte. Nach dem Schließen der Firewall und dem Neustart von <code>docker
konnte normal auf den Container zugegriffen werden. sysctl.conf
🎜docker
-Hosts ist normal und mit anderen Hosts verbunden Die Verbindung ist ungültig, andere Hosts können keine Verbindung zu dem auf dem docker
-Host zugeordneten Port herstellen und docker
kann intern keine Verbindung zu externen Hosts herstellen code>docker info-Befehl zum Anzeigen der Informationen. Der folgende Fehler wurde gefunden: 🎜ip addr add 172.16.0.1/24 dev br0
vim /etc/sysctl.conf
, um die Konfigurationsdatei zu bearbeiten und den folgenden Code hinzuzufügen in die Datei: 🎜ip link set dev br0 up
systemctl restart network
. Starten Sie das Netzwerk neu und überprüfen Sie erneut docker info
, und die Warnung verschwindet. Aber es ist immer noch nutzlos. Der Container auf der Bastion-Maschine kann immer noch nicht über die Brücke auf die Host-Maschine zugreifen und nicht auf das externe Netzwerk zugreifen. 🎜yum install bridge-utils
verwendet haben, um das Tool zu installieren, verwenden Sie brctl show
Sehen Sie sich die Netzwerkbrücke an und Sie finden:docker network create [bridge name]
, um eine neue Bridge zu erstellen und festzustellen, dass die generierte bridge id
lautet immer noch 8000.0000000000, erstellen Sie einen Container auf der neuen Brücke und überprüfen Sie es erneut. Es gibt keine Änderung, was darauf hindeutet, dass es sich wahrscheinlich um ein Problem mit der Brücke handelt. <br> Testen Sie erneut. Zu diesem Zeitpunkt ist die Bridge-<code>IP
172.17.0.1
und die Container-IP
ist 172.0.0.2
und stellte fest, dass der Host über die Netzwerkbrücke pingen
kann, aber keine Verbindung zum Container herstellen kann und der Container keine Verbindung zur Brücke und auch keine Verbindung zum Host herstellen kann, geschweige denn das externe Netzwerk, es muss sich also um die Netzwerkbrücke handeln. 🎜 这里docker network
生成新的网桥不行,说明docker
的network
存在问题,我们利用刚才下载的bridge-utils
来创建网桥。
首先暂停docker
服务,利用指令:
service docker stop
添加网桥:
brctl addbr br0
添加ip
字段:
ip addr add 172.16.0.1/24 dev br0
启用网桥br0
:
ip link set dev br0 up
查看网络br0
:
修改docker
默认网桥:
vim /etc/docker/daemon.json
添加字段:
"bridge":"br0"
重启docker
:
service docker start
此时查看网桥:
在没有挂载容器前,依旧是8000.000000000000
。运行测试容器:
docker run -itd --name busy_test busybox
查看Was soll ich tun, wenn Docker den Host nicht anpingen kann?:
此时容器挂载在网桥上了,再次查看网桥id
:
说明已经其作用,进入测试容器内部,Was soll ich tun, wenn Docker den Host nicht anpingen kann?:
成功!
补充:这里使用docker network
新建网桥,没有用,发现新建网桥挂载容器后,其bridge id
依旧不变,没有起作用,说明堡垒机上的docker network
可能存在问题。
上面的问题是创建自定义网桥,然后在自定义网桥上连接容器a
和b
,结果宿主机无法ping
通a
、b
,且进入容器内部后,两个容器无法ping
通自定义网络,但能彼此相通。
查了很多资料,发现了这篇文章。博主说问题原因是系统内核的网桥模块bridge.ko
加载失败导致,解决问题的方案是升级内核或升级系统。
升级centos
内核参考这篇。
升级完成后,重装Docker
,自定义网桥和容器,成功!不再有网络问题。
推荐学习:《docker视频教程》
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn Docker den Host nicht anpingen kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!