iptables - docker无法指定容器相连
伊谢尔伦
伊谢尔伦 2017-04-27 09:01:47
0
3
767

docker配置:

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

先起一个web主机:
docker run -d --name web -p 8080:80 php-fpm:5.4

再起一个test主机测试连接:
docker run -dit --name test --link web:web blackhole/ubuntu:0.1 bash

查看iptables filter的表:

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

进入test容器内部:

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 --link上面都已经满足了。为了防止意外,再第一步之前还执行了iptables -F清除

问题出在哪里呢?或者说可能出现在哪里呢

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(3)
洪涛

解決済み:
docker のリンク パラメーターの本質は、iptables とコンテナーのホストにルールを追加することです。上記から、ルールが追加されたことがわかりますが、なぜ追加されないのでしょうか?以前、Dockerfile を作成するときに EXPOSE パラメーターを追加するのを忘れていたためです (このコマンドは役に立たないとずっと思っていたためです) 実際、EXPOSE は、単に -P コマンドを使用して開発者に表示するのに便利なだけではありません。 。 の。 iptables の ACCEPT ルールはポートに基づいていますが、EXPOSE に記述していないため、リンクが役に立たなくなります。一般的なWebコンテナやDBコンテナが開いているポートは3306、80、443ですが、どれも開いていないため、リンク接続後はpingやcurlが通らず、pingもポート80を経由しません。 3306、443。したがって、たとえ成功しても ping は送信されません。

いいねを押す +0
滿天的星座

これらのコンテナを同じブリッジネットワークの下に置きます

いいねを押す +0
大家讲道理

docker がコンテナを起動すると、デフォルトでコンテナ用に独立したネットワークが作成されます。docker network ls 查看当前的网络。当使用link を渡すことができる場合は、2 つを同じネットワーク上に配置する必要があります。
最初のコンテナ A など

リーリー

ZaixiコンテナB

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート