Amazon web services Docker容器可以';我无法连接到互联网
我在AWS EC2实例上运行Docker容器,Docker容器通过一个Docker网络连接,该网络通过etcd集群复制。 但是所有的容器都不能在外面连接。例如,如果我ping或curl一个主机,它会丢失100%的包。 etcd网络通过AWS专用IP进行通信 这是我的docker信息:Amazon web services Docker容器可以';我无法连接到互联网,amazon-web-services,docker,amazon-ec2,etcd,docker-networking,Amazon Web Services,Docker,Amazon Ec2,Etcd,Docker Networking,我在AWS EC2实例上运行Docker容器,Docker容器通过一个Docker网络连接,该网络通过etcd集群复制。 但是所有的容器都不能在外面连接。例如,如果我ping或curl一个主机,它会丢失100%的包。 etcd网络通过AWS专用IP进行通信 这是我的docker信息: root@ip-10-0-127-34:/home# docker info Containers: 3 Running: 3 Paused: 0 Stopped: 0 Images: 9 Server Ve
root@ip-10-0-127-34:/home# docker info
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 9
Server Version: 17.05.0-ce
Storage Driver: devicemapper
Pool Name: docker-202:1-2050903-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 4.554GB
Data Space Total: 107.4GB
Data Space Available: 102.8GB
Metadata Space Used:sattler 6.922MB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.141GB
Thin Pool Minimum Free Space: 3.221GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.110 (2015-10-30)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.4.0-1028-aws
Operating System: Ubuntu 16.04.3 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 7.303GiB
Name: ip-10-0-127-34
ID: JFQO:C56I:VM22:UDKJ:QDKD:HUDT:KL3X:JCSR:WAPG:66JL:S4RM:4ENN
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Cluster Store: etcd://127.0.0.1:2379
Cluster Advertise: 10.0.127.34:2376
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
WARNING: No swap limit support
Docker检查网络:
{
"Name": "df-global",
"Id": "59aef8ccc5d7464ee715428783b9b03ba7737d298f41cc30a21f4856e75b92c1",
"Created": "2017-08-14T09:51:31.650109966Z",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.1.0/14"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"Containers": {
"ep-f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb": {
"Name": "elasticsearch-data-1",
"EndpointID": "f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb",
"MacAddress": "02:42:c0:a8:00:0b",
"IPv4Address": "192.168.0.11/14",
"IPv6Address": ""
},
"ep-f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce": {
"Name": "postgresql-vg_internal01-prod",
"EndpointID": "f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/14",
"IPv6Address": ""
此处描述了相同的问题:
但是没有答案在主机上运行:
sudo ip addr show docker0
您将获得包括以下内容的输出:
inet 172.17.2.1/16 scope global docker0
docker主机在docker0网络接口上具有IP地址172.17.2.1
然后启动容器:
docker run --rm -it ubuntu:trusty bash
跑
ip addr show eth0
产出将包括:
inet 172.17.1.29/16 scope global eth0
您的容器的IP地址为172.17.1.29。现在查看路由表:
运行:
产出将包括:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.17.2.1 0.0.0.0 UG 0 0 0 eth0
这意味着docker主机172.17.2.1的IP地址被设置为默认路由,可以从您的容器访问
请立即尝试ping到主机ip:
root@e21b5c211a0c:/# ping 172.17.2.1
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data.
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms
如果这是最有可能的工作,你将能够ping任何公共IP
希望这会有帮助 不过还有另一种选择。。如果你不想弄乱网络路由,那么在运行你的容器时,试试Docker支持将挂载文件从主机绑定到容器。您可以绑定并安装Docker控件套接字
docker run -v /var/run/docker.sock:/var/run/docker.sock ...usual code here...
希望这会有帮助 要允许容器相互通信: 创建网络
docker network create <your-network-name>
docker网络创建
然后将所有容器连接到新创建的网络
docker network connect <your-network-name> <containers>
docker网络连接
希望这会有帮助 我仍然能够
ping 172.17.2.1
,但这是我可以从容器中联系的唯一ip地址。原来有人/事清除了iptables防火墙,并用默认的ACCEPT
规则替换了每个表中的每个链!缺少所有docker nat和转发规则。快速重启解决了这个问题
临时解决方案是使用docker命令行选项
--网络“主机”
谢谢您的回答。如果我尝试ping localhost,我会得到一个100%丢失的包以及目标主机无法访问的信息root@be845f307ee6:/#ping 172.17.2.1 ping 172.17.2.1(172.17.2.1)56(84)字节的数据。从172.17.0.3 icmp_seq=1目标主机不可访问从172.17.0.3 icmp_seq=2目标主机不可访问从172.17.0.3 icmp_seq=3目标主机不可访问^C---172.17.2.1 ping统计---5个数据包传输,0个接收,+3个错误,100%数据包丢失,时间4022ms管道3
尝试另一个答案。。如果仍然没有运气。。我将帮助您修复路由表和网络,以便能够ping hostI将Docker网络更改为Docker Network create-d overlay——子网192.168.1.0/14 df global现在我可以卷曲或ping google.com和外部站点,但如果我尝试连接或ping网络中的其他容器,我会丢失一个包。例如,ping db01 prod是一个docker容器。如果我做docker network inspect Name,我会看到容器这些容器是同一个集群的一部分??是的,如果我检查网络,你会发现他们在问题中添加了它我将docker网络更改为docker network create-d overlay——子网192.168.1.0/14 df global现在我可以卷曲或ping google.com和外部站点,但是如果我尝试连接或ping到网络中的其他容器,我会丢失一个包。例如,ping db01 prod是一个docker容器。如果我做docker网络检查NAMEHi,我会看到容器,谢谢你的回答。我用它创建了网络$docker network create-d overlay——子网192.168.1.0/14 df global并连接了所有容器。在docker network inspect network中,在初始问题中,您将看到连接的容器,但如果我执行其中一个容器并尝试ping网络中的另一个容器,我会得到100%的包丢失,并且它们无法通信。如果我从docker inspect尝试容器名称或容器IP
docker network connect <your-network-name> <containers>