Как двунаправленно связать контейнеры в мостовой (docker0) сети.
Конфигурация:
- Windows 10 Pro
- Docker версия 19.03. 8, сборка afacb8b
Я пытаюсь связать два контейнера, которые были созданы следующим образом:
$ docker container run -dit --name alpine_1 alpine sh
$ docker container run -dit --name alpine_2 --link alpine_1 alpine sh
Отказ от ответственности : Я знаю, что --link
flag является устаревшим, и его использование не рекомендуется, а официальная документация поощряет использование настраиваемой сети, но это для целей обучения.
Оба контейнера созданы и работают в bridge
( docker0
) сеть, и я могу пинговать от alpine_2 до alpine_1 :
$ docker container exec alpine_2 ping alpine_1
PING alpine_1 (172.17.0.4): 56 data bytes
64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.099 ms
[...]
Но в другом направлении это невозможно:
$ docker container exec alpine_1 ping alpine_2
ping: bad address 'alpine_2'
Если я проверяю оба контейнера, я понимаю, что HostConfig.Links отличаются друг от друга.
$ docker container inspect -f "{{.HostConfig.Links}}" alpine_1
[]
$ docker container inspect -f "{{.HostConfig.Links}}" alpine_2
[/alpine_1:/alpine_2/alpine_1]
Я пытался связать контейнеры с помощью команды network connect
, отключаясь и соединяясь с подходящая ссылка на контейнер alpine_2 , но тоже не работает.
$ docker network disconnect bridge alpine_1
$ docker network connect --link alpine_2 bridge alpine_1
$ docker container inspect -f "{{.HostConfig.Links}}" alpine_1
[]
Что действительно изменилось, так это мост Links.
$ docker container inspect -f "{{.NetworkSettings.Networks.bridge.Links}}" alpine_1
[alpine_2]
Как связать контейнер alpine_1 с alpine_2 без запуска нового контейнера? И каковы варианты использования флага --link
в команде network connect
?