recherche

Maison  >  Questions et réponses  >  le corps du texte

iptables - docker无法指定容器相连

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清除

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

伊谢尔伦伊谢尔伦2757 Il y a quelques jours726

répondre à tous(3)je répondrai

  • PHP中文网

    PHP中文网2017-04-27 09:03:47

    Solution :
    L'essence du paramètre de lien de docker est d'ajouter des règles à iptables et aux hôtes du conteneur. D'après ce qui précède, vous pouvez voir que les règles ont été ajoutées, mais pourquoi pas. Parce qu'avant, j'avais oublié d'ajouter le paramètre EXPOSE lors de l'écriture du Dockerfile (car j'ai toujours pensé que cette commande était inutile). En fait, EXPOSE ouvrira le port ce n'est pas simplement pratique pour utiliser la commande -P et la montrer aux développeurs. . de. Les règles ACCEPT d'iptables sont basées sur les ports, mais je ne les ai pas écrites dans EXPOSE, ce qui rendra le lien inutile. Les ports ouverts par les conteneurs Web généraux ou les conteneurs de base de données sont 3306, 80 et 443, mais aucun d'entre eux n'est ouvert. Par conséquent, ping et curl ne peuvent pas être transmis une fois le lien connecté, et le ping ne passe pas par les ports 80. 3306 et 443. Ainsi, même s’il réussit, il n’y aura pas de ping.

    répondre
    0
  • 滿天的星座

    滿天的星座2017-04-27 09:03:47

    Que ces conteneurs soient sous le même réseau de ponts

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-27 09:03:47

    Lorsque Docker démarre un conteneur, il crée par défaut un réseau indépendant pour celui-ci. Vous pouvez afficher le réseau actuel via docker network ls. Lorsque vous utilisez link, les deux doivent être placés sur le même réseau.
    Si le conteneur A est démarré en premier

    docker run A;

    Redémarrer le conteneur B

    docker run --link A:a --net A_default B

    répondre
    0
  • Annulerrépondre