在AWS上,我在Docker主机上运行了一个consul容器和一个覆盖networking。
docker工人
容器ID图像命令创build状态端口名称
77b97d803d8c busybox“sh”5天前忙碌了5天
206af8b467c2 daocloud.io/library/httpd“httpd-foreground”5天前上载5天0.0.0.0:32768->80/tcp web1
b40d24fd8f91 progrium / consul“/ bin / start -serve ...”5天前5天53 / tcp,53 / udp,8300-8302 / tcp,8400 / tcp,8301-8302 / udp,0.0.0.0:8500 - > 8500 / tcp领事
dockernetworking检查myoverlay
[
{
“名称”:“myoverlay”,
“Id”:“a1752c608259d44a5bc0ad8b47e8b340d0252d026bf113cea681e8a92633e844”,
“Created”:“2017-09-05T06:37:13.271539119Z”,
“范围”:“全球”,
“驱动程序”:“覆盖”
“EnableIPv6”:false,
“IPAM”:{
“驱动程序”:“默认”,
“选项”:{},
“configuration”:[
{
“子网”:“172.16.16.0/24”,
“IPRange”:“172.16.16.128/25”,
“辅助地址”:{
“ip2”:“172.16.16.2”
}
}
]
},
“内部”:错误,
“可连接”:假,
“Ingress”:假,
“ConfigFrom”:{
“networking”:“”
},
“ConfigOnly”:假,
“容器”:{
“206af8b467c2020b51017524984b322f1544e6b8594b672d4fa6bcb7b263b564”:{
“名称”:“web1”,
“EndpointID”:“d44ecac9eb248a90dd895d31170aca65333f248616a0998e22b81e4a1c7414b2”,
“MacAddress”:“02:42:ac:10:10:81”,
“IPv4Address”:“172.16.16.129/24”,
“IPv6Address”:“”
},
“77b97d803d8c0c3c3ceb0bcb6ca4f82971f9a68273ec32266cadd950350a4a7e”:{
“名称”:“busybox”,
“EndpointID”:“1a00a326b49b448c7b280faca58bb7ca67cea5d11c513ce64928b0a76fb673f3”,
“MacAddress”:“02:42:ac:10:10:82”,
“IPv4Address”:“172.16.16.130/24”,
“IPv6Address”:“”
},
“ep-f774da45dbf1655150fe5dd0a76b29c02873dd79181f26d1c39f12fd2523897d”:{
“名称”:“web2”,
“EndpointID”:“f774da45dbf1655150fe5dd0a76b29c02873dd79181f26d1c39f12fd2523897d”,
“MacAddress”:“02:42:ac:10:10:83”,
“IPv4Address”:“172.16.16.131/24”,
“IPv6Address”:“”
}
},
“选项”:{},
“标签”: {}
}
]
正如你所看到的,在运行Consul容器的Docker主机上有三个容器正在运行。 而一个Docker主机中的容器可以使用覆盖IP来互相ping通。
docker exec 77b97d803d8c ping 172.16.16.129 PING 172.16.16.129(172.16.16.129):56个数据字节 来自172.16.16.129的64个字节:seq = 0 ttl = 64时间= 0.098ms 来自172.16.16.129的64个字节:seq = 1 ttl = 64时间= 0.096ms 来自172.16.16.129的64字节:seq = 2 ttl = 64时间= 0.096ms 来自172.16.16.129的64个字节:seq = 3 ttl = 64时间= 0.098ms ^ C
以下输出来自已经join覆盖networking的另一个Docker主机。
dockernetworking检查myoverlay
[
{
“名称”:“myoverlay”,
“Id”:“a1752c608259d44a5bc0ad8b47e8b340d0252d026bf113cea681e8a92633e844”,
“Created”:“2017-09-05T06:37:13.271539119Z”,
“范围”:“全球”,
“驱动程序”:“覆盖”
“EnableIPv6”:false,
“IPAM”:{
“驱动程序”:“默认”,
“选项”:{},
“configuration”:[
{
“子网”:“172.16.16.0/24”,
“IPRange”:“172.16.16.128/25”,
“辅助地址”:{
“ip2”:“172.16.16.2”
}
}
]
},
“内部”:错误,
“可连接”:假,
“Ingress”:假,
“ConfigFrom”:{
“networking”:“”
},
“ConfigOnly”:假,
“容器”:{
“9caaf8d7fe01104f4609053d94ca231fc4c91d5862b90244768c2c08f99cb65e”:{
“名称”:“web2”,
“EndpointID”:“f774da45dbf1655150fe5dd0a76b29c02873dd79181f26d1c39f12fd2523897d”,
“MacAddress”:“02:42:ac:10:10:83”,
“IPv4Address”:“172.16.16.131/24”,
“IPv6Address”:“”
},
“ep-1a00a326b49b448c7b280faca58bb7ca67cea5d11c513ce64928b0a76fb673f3”:{
“名称”:“busybox”,
“EndpointID”:“1a00a326b49b448c7b280faca58bb7ca67cea5d11c513ce64928b0a76fb673f3”,
“MacAddress”:“02:42:ac:10:10:82”,
“IPv4Address”:“172.16.16.130/24”,
“IPv6Address”:“”
},
“ep-d44ecac9eb248a90dd895d31170aca65333f248616a0998e22b81e4a1c7414b2”:{
“名称”:“web1”,
“EndpointID”:“d44ecac9eb248a90dd895d31170aca65333f248616a0998e22b81e4a1c7414b2”,
“MacAddress”:“02:42:ac:10:10:81”,
“IPv4Address”:“172.16.16.129/24”,
“IPv6Address”:“”
}
},
“选项”:{},
“标签”: {}
}
]
来自一个Docker主机的docker集装箱无法ping通另一个Docker主机。
docker exec 77b97d803d8c ping 172.16.16.131
Docker主机的安全组已允许彼此的所有stream量。
我试图telnet一个Docker主机的Serf的7946端口,但是它只返回没有到主机的路由。
我的configuration有什么问题吗? 还是缺lessconfiguration的覆盖? 在此先感谢您的帮助。
您所看到的行为表明Docker主机之间存在防火墙,也可能是主机本身的防火墙或networking中的防火墙。 您需要打开以下内容:
这个iptables命令(如果你有iptables默认丢弃):
iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp -m udp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 4789 -j ACCEPT iptables -A INPUT -p 50 -j ACCEPT
我build议在每个节点上使用tcpdump来监视这个stream量是否被阻塞在某个地方。
另一种可能性是你遇到了Docker的缺陷,像问题32195 。 但是,这只会偶尔影响一些请求,而不是每个请求。