无法在Docker容器内连接网络

9

我有一台运行着Docker的CentOS 7主机。当我从主机ping 8.8.8.8时,ping命令是成功的,但是同样的操作在Docker容器内却无法正常工作。

来自主机:

[root@linux1 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=31.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=31.6 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 31.592/31.617/31.643/0.179 ms

从 Docker 容器中(我正在使用基本的 Ubuntu 镜像):

[root@linux1 ~]# docker run ubuntu ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 172.17.0.1 icmp_seq=1 Destination Host Unreachable
From 172.17.0.1 icmp_seq=2 Destination Host Unreachable
From 172.17.0.1 icmp_seq=3 Destination Host Unreachable
From 172.17.0.1 icmp_seq=4 Destination Host Unreachable
^C
--- 8.8.8.8 ping statistics ---
6 packets transmitted, 0 received, +4 errors, 100% packet loss, time 5000ms
pipe 4

有任何建议都会很有帮助。谢谢。

5个回答

3

最近我遇到了类似的网络问题。这里的其他答案并没有帮助:DNS工作正常,重新启动Docker也没有改变任何事情。我发现将网络指定为host可以解决这个问题。

有三种方法可以解决:

docker-compose中:

通过在yaml文件中设置network_mode

services:
  worker:
    build: .
    network_mode: host

在构建镜像时使用RUN命令的图像构建阶段docker build --network=host 在应用程序的执行阶段中: docker run --network=host <image>

当我添加network_mode: host时,我得到了以下错误:ERROR: 对于信号量“host”,network_mode与port_bindings不兼容 - Kelvin Low
1
@KelvinLow 可能是因为你同时使用了主机网络和端口映射。在主机网络中,端口映射是不必要的,所以要么删除它,要么使用另一种网络模式。 - TheMechanic

1

在Debian9上重启Docker守护进程

service docker restart

这样连接和网络就能正常工作了。


0
尝试这个: docker run --dns=8.8.8.8 -it ubuntu ping 8.8.8.8 参考:DOCKER DNS

1
我也尝试了加上 --dns,但结果和没有加一样。 - slysid
1
docker run --dns=8.8.8.8 -it ubuntu ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) 字节的数据。 来自 172.17.0.1 的 icmp_seq=1 目标主机不可达。 - slysid
1
在运行docker run --dns=8.8.8.8 -it ubuntu之后,route -n的结果是什么? - ji-ruh

0

我找到了问题所在。这不是DNS的问题,而是Docker容器内部网络连接本身的问题。深入研究后发现,问题出在docker0接口分配的默认IP地址上,与我的网络地址冲突了。我强制docker守护程序分配一个IP地址,以避免冲突,问题得到解决。

谢谢。


14
你好,我遇到了类似的问题。你能提供一下你使用的命令,来强制让 Docker 守护进程为它分配一个 IP 吗? - ryekayo

0

当我分别停止和启动容器时,遇到了同样的问题。我只是重新构建和重新运行容器。

docker-compose down

docker-compose build

docker-compose up -d

然后问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接