Maison > Questions et réponses > le corps du texte
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中文网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.
大家讲道理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