Хост назначения недоступен при обмене данными между контейнерами с использованием консула в оверлейной сети докеров

Я использую версию докера 17.03 в Centos 7.

Версия ядра — 3.10.0-514.10.2.el7.x86_64

Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 08:10:07 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 08:10:07 2017
 OS/Arch:      linux/amd64
 Experimental: false

У меня есть node-0 и node-1 для многоузловой сети Docker, и я использую консул. В узле-0 я создал контейнер консула, используя следующую команду:

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

затем я создал вставной файл внутри /etc/systemd/system/docker.service.d и добавил следующие строки:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=<NODE0-IP>:2375"

как только это будет сделано, я перезапустил демон Docker и создал оверлейную сеть с помощью команды docker network create -d overlay --subnet=10.10.10.0/24 my-net, затем я создал контейнер вызвал container1 в узле-0 и сопоставил его с файлом my-net.

На машине node-1 я создал вставной файл внутри /etc/systemd/system/docker.service.d и добавил следующие строки:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=<NODE1-IP>:2375"

и запустил контейнер с именем container2 и сопоставил его с my-net.

Моя установка будет выглядеть так:

node0 - consul, container1
node1 - container2

Внутри контейнера2 я пытаюсь пропинговать контейнер1, но получаю следующий ответ:

PING container1 (10.10.10.3) 56(84) bytes of data.
From container2 (10.10.10.4) icmp_seq=1 Destination Host Unreachable
From container2 (10.10.10.4) icmp_seq=2 Destination Host Unreachable
From container2 (10.10.10.4) icmp_seq=3 Destination Host Unreachable
From container2 (10.10.10.4) icmp_seq=4 Destination Host Unreachable

из node0, ip a показывает

 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:50:56:9d:9c:9f brd ff:ff:ff:ff:ff:ff
        inet <NODE0-PRIVATE-IP>/24 brd 192.168.5.255 scope global ens32
           valid_lft forever preferred_lft forever
        inet6 fe80::250:56ff:fe9d:9c9f/64 scope link
           valid_lft forever preferred_lft forever
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
        link/ether 02:42:57:6d:e8:a9 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:57ff:fe6d:e8a9/64 scope link
           valid_lft forever preferred_lft forever
    4: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
        link/ether 02:42:10:5b:7d:b5 brd ff:ff:ff:ff:ff:ff
        inet 172.19.0.1/16 scope global docker_gwbridge
           valid_lft forever preferred_lft forever
        inet6 fe80::42:10ff:fe5b:7db5/64 scope link

внутри контейнера1 ip a отображается как

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP
    link/ether 02:42:0a:0a:0a:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.10.10.3/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:aff:fe0a:a03/64 scope link
       valid_lft forever preferred_lft forever
20: eth1@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:13:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 172.19.0.3/16 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe13:3/64 scope link
       valid_lft forever preferred_lft forever

Нужно ли мне что-то менять, чтобы получить эту работу? Заранее спасибо.


person Jugi    schedule 16.03.2017    source источник
comment
Какие порты вы открыли на любом брандмауэре между двумя хостами? Пожалуйста, включите команды запуска докера для вашего container1/2. Что выводит docker network inspect my-net на каждом из узлов?   -  person BMitch    schedule 16.03.2017


Ответы (1)


У меня есть докер 18.09.1 ​​на CentOS7, я не смог пропинговать удаленный хост с хост-компьютера докера, при пинге я получил IP-адрес docker_gwbridge, сеть, настроенную докером, искал и нашел эту статью https://github.com/docker/for-mac/issues/2345, запустите приведенную ниже команду и смог пропинговать удаленный хост.

docker network rm docker_gwbridge

Может, попробуй покинуть рой и попробуй,

docker swarm leave -f
person cursed_axes    schedule 07.05.2019
comment
Gwbridge предназначен для запросов, выходящих за пределы сети докеров. OP пытается установить связь между двумя узлами оверлейной сети, реализованной без режима роя. - person BMitch; 07.05.2019
comment
Согласно вашему редактированию: как упоминалось в моем комментарии, OP не использует режим роя. Я даже не уверен, что он существовал, когда был задан вопрос, но режим роя несовместим с другими хранилищами ключей и значений оверлейной сети, такими как консул. Так что оставить рой не получится. - person BMitch; 07.05.2019