ubuntu Docker容器无法解析主机

pepwfjgg  于 2023-03-01  发布在  Docker
关注(0)|答案(5)|浏览(195)

从我的主机我可以ping谷歌

$ cat /etc/resolv.conf 
nameserver 127.0.1.1
search my.company.server

$ ping google.com
PING google.com (172.217.16.174) 56(84) bytes of data.
64 bytes from fra15s11-in-f14.1e100.net (172.217.16.174): icmp_seq=1 ttl=54 time=11.0 ms
64 bytes from fra15s11-in-f14.1e100.net (172.217.16.174): icmp_seq=2 ttl=54 time=10.7 ms

从容器我可以访问互联网:

$ docker run ubuntu:14.04 cat /etc/resolv.conf
search my.company.server
nameserver 8.8.8.8
nameserver 8.8.4.4

$ docker run ubuntu:14.04 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=45 time=16.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=45 time=16.3 ms

但无法ping主机名:

$ docker run ubuntu:14.04 ping google.com
<no answer>

一些环境信息:

$ docker --version
Docker version 1.10.1, build 9e83765

$ cat /proc/version
Linux version 4.2.0-27-generic (buildd@lgw01-12) (gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2) ) #32-Ubuntu SMP Fri Jan 22 04:49:08 UTC 2016

$ cat /proc/sys/net/ipv4/ip_forward
1

$ ps -ef|grep [d]ocker
root   ....... /usr/bin/docker daemon -H fd://

与此类似:Docker container can reach DNS but not resolve hosts
但重启也无济于事。

yebdmbv4

yebdmbv41#

默认情况下,创建一个新的Docker容器也会创建一个虚拟网络,将Docker网络环境与主机网络环境(在某种程度上)分开,这允许用户轻松启动多个容器,这些容器可能都监听同一个端口(例如80),但可以Map到主机上的唯一端口(例如service 1:80 -〉host:8080,service 2:80 -〉host:8081)。
docker run YOUR_IMAGE --network="host"将容器网络适配器绑定到主机的容器网络适配器。这应允许您通过主机的侦听端口访问主机。例如localhost:8080。但是,您需要记住,端口是稀缺资源,在执行此操作时,不同容器中的端口侦听器不能冲突。
您还可以根据操作系统和Docker版本从Docker容器中检索主机的IP地址:
Mac/Windows:从Docker v18.03+开始,您可以使用host.docker.internal主机名连接到Docker主机。
Linux:docker container run -e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')"将使Docker容器中的主机IP作为环境变量可用:DOCKER_HOST

r1zhe5dt

r1zhe5dt2#

我们遇到了连接到mongoDB的问题。当我们尝试从主机系统连接时,它正在工作,而从Docker连接时,它失败了。我们观察到Docker没有正确启动,并重新启动了Docker。
使用此命令重新启动:sudo systemctl重新启动对接程序

qvtsj1bj

qvtsj1bj3#

基于Mac,你应该去鲸鱼在Docker〉首选项〉Docker引擎〉守护程序

{
"debug": true,
"experimental": false,
"dns": ["8.8.8.8"]
}

更新并重新启动引擎。应该能修好。

8e2ybdfx

8e2ybdfx4#

您的问题可能由错误的Docker状态触发。
你可以试试

sudo ip link delete docker0
sudo systemctl restart docker
tez616oj

tez616oj5#

我在没有分配网络的情况下运行docker run时也遇到了同样的问题,原因是:

  • 当运行docker run而不运行--network时,将使用默认bridge网络,然后使用Docker文档中的默认bridge网络

默认网桥网络上的容器只能通过IP地址相互访问,除非您使用--link选项,该选项被认为是传统的。在用户定义的网桥网络上,容器可以通过名称或别名相互解析。
所以我在docker run中添加了--link <hostname>,它可以成功解析主机。但是--link已过时,将来会被删除。

相关问题