Docker контейнеров в одной сети не могут общаться друг с другом - PullRequest
0 голосов
/ 17 января 2020

Я впервые использую Docker в Centos.

При развертывании двух контейнеров я обнаружил, что у меня проблемы с маршрутизацией для inte rnet, а затем обнаружил, что даже не могу заставить их общаться друг с другом (несмотря на то, что по умолчанию bridge network).

В одном контейнере это происходит:

/ # ip a | grep 172
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
/ # ping 172.17.0.3
PING 172.17.0.3 (172.2.0.3): 56 data bytes
^C
--- 172.17.0.3 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss

В другом же поведение:

/ # ip a | grep 172
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
/ # ping 172.17.0.2
PING 172.17.0.2 (172.2.0.2): 56 data bytes
^C
--- 172.2.0.2 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss

И они находятся в одной сети:

$ docker inspect 91767dd3adfa | grep -i networkid
                    "NetworkID": "d36d28507f9cc3f6c40437330af3778c117d303e106de0b3b43ad7919d2791c7",
$ docker inspect a393490d8d02 | grep -i networkid
                    "NetworkID": "d36d28507f9cc3f6c40437330af3778c117d303e106de0b3b43ad7919d2791c7",
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
d36d28507f9c        bridge              bridge              local
f32f4c8d6187        host                host                local
5693790b1713        none                null                local

Почему это происходит? Я использовал Docker в Ubuntu и MacOS, и он работает без проблем.

Ответы [ 3 ]

0 голосов
/ 17 января 2020

Что я вижу здесь, так это то, что это полностью ваша ошибка, IP-адреса машин находятся в сети 172.17.0.0/16, но вы пытаетесь пинговать машины на 172.2.0.0/16, поэтому они не будут работать как машины с этой сетью вне зоны действия и, кроме того, IP-адреса существующих машин не являются теми, на которые вы отправляете запрос ping.

0 голосов
/ 20 января 2020

Я нашел решение.

Включение брандмауэра для разрешения подключений из сети docker0 и входящих в нее.

Это было выполнено с помощью следующих команд:

iptables -I INPUT -s <network> -i docker0 -m comment --comment "00015 input on docker0" -j ACCEPT
# accept any package coming from the network to docker0 interface
iptables -I FORWARD -m comment --comment "00010 conntrack on forward" -m state --state RELATED,ESTABLISHED -j ACCEPT
# maintain any 'session' or link to be able to return packages fro meth0 to docker0 (answer). Very tightened to the existance of a 'nat', otherwise this entry does not have any impact
iptables -I FORWARD -s <network> -i docker0 -o eth0 -m comment --comment "00011 forward to eth0 from docker0" -j ACCEPT
#forward packages
iptables -t nat -I POSTROUTING -s  <network> -o eth0 -m comment --comment "00013 masquerade on eth0 from docker0"
-j MASQUERADE
# create nat in order for any package that goes out of the host to be able to come back using the ip of the host and after the ip of the container

0 голосов
/ 17 января 2020

попробуйте создать новую сеть и связать контейнеры с этой сетью, сеть по умолчанию docker "мост" не работает, поскольку другие сети созданы вручную

...