【问题标题】:docker cannot specify container connectiondocker 无法指定容器连接
【发布时间】:2017-06-28 08:01:14
【问题描述】:

docker 配置: root@ubuntu> ps -ef | grep docker root xxxxx /usr/bin/dockerd -H fd:// -b=br0 --icc=false --iptables=true

启动“网络”容器:

docker run -d --name web -p 8080:80 php-fpm:5.4

启动“测试”容器:

docker run -dit --name test --link web:web blackhole/ubuntu:0.1 bash

iptables 过滤器:

root@ubuntu> sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (0 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            192.168.100.2        tcp dpt:80
ACCEPT     tcp  --  192.168.100.3        192.168.100.2        tcp dpt:80
ACCEPT     tcp  --  192.168.100.2        192.168.100.3        tcp spt:80
ACCEPT     tcp  --  192.168.100.3        192.168.100.2        tcp dpt:443
ACCEPT     tcp  --  192.168.100.2        192.168.100.3        tcp spt:443
ACCEPT     tcp  --  192.168.100.3        192.168.100.2        tcp dpt:22
ACCEPT     tcp  --  192.168.100.2        192.168.100.3        tcp spt:22

在“测试”容器中:

sudo docker exec -it test bash
root@00585b9efea8:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.100.2   web 2cec3235f5fa
192.168.100.3   00585b9efea8
root@00585b9efea8:/# ping web
PING web (192.168.100.2): 56 data bytes
^C--- web ping statistics ---
12 packets transmitted, 0 packets received, 100% packet loss
root@00585b9efea8:/# ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2): 56 data bytes
^C--- 192.168.100.2 ping statistics ---
12 packets transmitted, 0 packets received, 100% packet loss
root@00585b9efea8:/# curl web
^C
root@00585b9efea8:/# curl http://192.168.100.2:80
^C

指定容器的三个条件:

--icc=fasle

--iptables=true

--链接

没问题,为什么不呢?

ubuntu 版本:16.04.2 LTS 码头工人版本:.13.1 内核版本:4.9.0-040900-generic

【问题讨论】:

    标签: bash ubuntu docker iptables


    【解决方案1】:

    link 选项一直是 deprecated。对于基于 DNS 的服务发现,您应该创建一个新的桥接网络并指定 --net 以让 docker 容器加入该网络:

    创建新的桥接网络:

    docker network create --subnet=192.168.177.0/24 --gateway=192.168.177.1 www
    

    在这个网络上创建两个容器:

    docker run -d --name=nginx1 --net=www nginx:1-alpine
    docker run -d --name=nginx2 --net=www nginx:1-alpine
    

    尝试按名称相互 ping 通:

    docker exec -it nginx1 /bin/sh
    / # ping nginx2
    PING nginx2 (192.168.177.3): 56 data bytes
    64 bytes from 192.168.177.3: seq=0 ttl=64 time=0.113 ms
    64 bytes from 192.168.177.3: seq=1 ttl=64 time=0.123 ms
    
    --- nginx2 ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 0.113/0.118/0.123 ms
    

    您可以通过执行docker network inspect www查看此网络上的容器

    更多信息可以在这里找到: https://docs.docker.com/engine/userguide/networking/

    【讨论】:

    • 这是个好主意。但是因为有些要求必须使用link选项。
    • 好吧,-icc 选项正在满足您的要求:禁用容器间通信。看起来你必须添加自己的 iptables 规则才能让他们也能交谈。
    • 我会再试一次。如果没有,我会听取你的建议。非常感谢您的帮助。
    • 没问题。如果您设置-icc=true,还可以查看您的问题是否消失。如果我的回答有帮助,请将其标记为正确。谢谢
    • 你好,这个问题已经解决了。因为我没有在dockerfile中添加expose命令。无论如何,谢谢你的帮助
    猜你喜欢
    • 2020-02-29
    • 2015-05-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2021-04-04
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多