cari

Rumah  >  Soal Jawab  >  teks badan

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

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

伊谢尔伦伊谢尔伦2768 hari yang lalu747

membalas semua(3)saya akan balas

  • PHP中文网

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

    Penyelesaian:
    Intipati parameter pautan docker adalah untuk menambah peraturan pada iptables dan hos kontena Daripada perkara di atas, anda dapat melihat bahawa peraturan telah ditambahkan, tetapi mengapa tidak. Kerana sebelum ini, saya terlupa untuk menambah parameter EXPOSE semasa menulis Dockerfile (kerana saya selalu menganggap arahan ini tidak berguna, sebenarnya, EXPOSE akan membuka port Ia bukan mudah untuk menggunakan arahan -P dan menunjukkannya kepada pembangun). daripada. Peraturan TERIMA iptables adalah berdasarkan port, tetapi saya tidak menulisnya dalam EXPOSE, yang akan menyebabkan pautan menjadi tidak berguna. Port yang dibuka oleh bekas web umum atau bekas db ialah 3306, 80 dan 443, tetapi tiada satu pun daripadanya terbuka Akibatnya, ping dan curl tidak boleh dihantar selepas pautan disambungkan dan ping tidak melalui port 80, 3306, dan 443. Jadi walaupun ia berjaya, ia tidak akan ping.

    balas
    0
  • 滿天的星座

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

    Biar kontena ini berada di bawah rangkaian jambatan yang sama

    balas
    0
  • 大家讲道理

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

    Apabila docker memulakan bekas, ia mencipta rangkaian bebas untuknya secara lalai Anda boleh melihat rangkaian semasa melalui docker network ls. Apabila menggunakan link, kedua-duanya perlu diletakkan pada rangkaian yang sama.
    Jika bekas A dimulakan dahulu

    docker run A;

    Mulakan Semula Bekas B

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

    balas
    0
  • Batalbalas