我已经在AWS上设置了EC2实例。
正确设置了我的安全组,以便实例可以访问Internet,例如
ubuntu@ip-10-17-0-78:/data$ ping www.google.com
PING www.google.com (216.58.211.164) 56(84) bytes of data.
64 bytes from dub08s01-in-f4.1e100.net (216.58.211.164): icmp_seq=1 ttl=46 time=1.02 ms
64 bytes from dub08s01-in-f4.1e100.net (216.58.211.164): icmp_seq=2 ttl=46 time=1.00 ms
但是,当我执行到容器中时,这是不可能的:
root@d1ca5ce50d3b:/app# ping www.google.com
ping: www.google.com: Temporary failure in name resolution
update_1:连接性问题与docker stack deploy
在特定堆栈中使用初始化的容器有关;
当我仅启动一个独立容器时,就可以连接到Internet:
ubuntu@ip-10-17-0-78:/data$ docker run -it alpine:latest /bin/ash
/ # ping www.google.gr
PING www.google.gr (209.85.203.94): 56 data bytes
64 bytes from 209.85.203.94: seq=0 ttl=38 time=1.148 ms
64 bytes from 209.85.203.94: seq=1 ttl=38 time=1.071 ms
update_2:经过调查,结果是:
docker stack deploy
做不 ;即这是从docker swarm
-启动的容器中获取的:
ubuntu@ip-10-17-0-78:~$ docker exec -it d1ca5ce50d3b bash
root@d1ca5ce50d3b:/app# cat /etc/resolv.conf
search eu-west-1.compute.internal
nameserver 127.0.0.11
options ndots:0
update_3:当我使用docker-compose
而不是来启动堆栈时,问题同样存在docker stack deploy
。似乎不是swarm
特定问题;
update_4:我已经明确添加了/etc/docker/daemon.json
具有以下内容的gfile :
{
"dns": ["10.0.0.2", "8.8.8.8"]
}
ubuntu @ ip-10-17-0-78:/ data $ docker run busybox nslookup google.com服务器:8.8.8.8地址:8.8.8.8:53
非权威性答案:姓名:google.com地址:216.58.211.174
***找不到google.com:没有答案
但查找仍然失败:
有什么建议为什么会令人沮丧吗?
我只是遇到了类似的问题。我知道这已经11个月了,但是在此主题上查找信息有些困难,因此我将在此处发布信息。
我的问题原来是docker swarm覆盖网络的默认子网与我的vpcs子网重叠,因此在我的情况下,默认的Amazon ec2 dns服务器(10.0.0.2)混淆了docker守护程序的ip地址路由,使其认为是一群人覆盖本地服务(我认为)。无论如何,我通过通过堆栈文件network:部分更改默认的覆盖子网解决了我的问题,而我的docker守护进程又开始重新解析10.0.0.2 vpc dns服务器。
如果将节点docker守护程序放在调试模块中(在Linux上/etc/docker/daemon.json
,添加"debug": true
到json),则可以通过在特定系统上记录该守护程序的日志来监视调试输出。如果守护程序是通过systemd运行的,journalctl -u docker
则将提供日志。-f
将遵循日志。
在那里,我发现了有关连接问题的信息(docker守护进程无法与10.0.0.2:54-udp dns端口上的dns服务器联系)。但是,nslookup在主机操作系统上运行良好,/etc/resolve.conf
看起来很合适。如果您使用docker exec进行交互,则问题很明显/bin/sh
在一项正在运行的服务中。nslookup对于任何外部域均失败,并且docker守护程序调试日志吐出了更多有关10.0.0.2的“连接被拒绝”类型的消息。在研究了dns解析的docker支持问题一两个小时后,我发现一条评论,指出docker swarm虚拟网络是根据一些默认值分配地址的,有时这些默认值与您设置本地子网的方式重叠。我认为,如果它们与我的vpc上的dns服务器重叠,则可能是在群内路由dns数据包,而不是解析到vpc子网路由。
您能否重现该部分的内容,
networking:
这些内容使您的10.0.0.2
docker 守护程序开始重新解析vpc dns服务器?我认为我正面临着完全相同的问题,但是我发现有关如何实施您的建议的文档尚无定论……进行更深入的挖掘……似乎在此添加了
networks: default: ipam: driver: default config: - subnet: '192.168.0.0/24'
…………docker-compose.yml
使其可以执行所需的操作,但是我很乐意看到一些确认,是否确实是the-right-stuff™原来那也是我的情况。CIDR重叠
@pkaramol您如何解决的?