Назад | Перейти на главную страницу

Порт внутри связанного контейнера докеров недоступен для другого контейнера

Следуя документации Docker по связыванию контейнеров, я пытаюсь создать два контейнера: salt-master и salt-minion, при этом salt-minion имеет ссылку на salt-master. Кроме того, я использую инструкцию Dockerfile EXPOSE для открытия портов на мастере соли. Насколько я понимаю, мне нужно добраться до открытых портов соли-мастера из контейнера с солью-миньоном.

Мой Dockerfile для соли-мастера:

FROM fedora
EXPOSE 4505 4506
ADD master /etc/salt/master
CMD /usr/bin/salt-master -l debug

Я запускаю контейнер с солью:

docker run -it --name salt-master myuser/fedora-salt-master /bin/bash

Я запускаю контейнер с солью-миньоном:

docker run -it --name salt-minion --link salt-master:salt-master  myuser/fedora-salt-minion /bin/bash

Затем я бегу из контейнера с солью и миньоном и получаю:

telnet salt-master 4506
Trying 172.17.0.105...
telnet: connect to address 172.17.0.105: No route to host

Если я загляну внутрь солеварни, порт кажется открытым. Однако они недоступны для соленого миньона.

Если я посмотрю с помощью tcpdump, я получу:

11:26:12.188884 IP 172.17.42.1 > 172.17.0.112: ICMP host 172.17.0.111
   unreachable - admin prohibited, length 68

где:

172.17.0.111 - это salt-minion, хост, с которого я пробую порты

172.17.0.112 - это солевой мастер, хост, открывающий порты

172.17.42.1 - виртуальный интерфейс docker0

У кого-нибудь есть ключ?

Хост - это Fedora 22, и кажется, что брандмауэр на хосте не позволял контейнерам достигать друг друга. У меня был запущен firewalld Fedora, и это позволяло контейнерам пинговать друг друга, но не достигать своих портов. Я отключил firewalld, вместо этого использовал только iptables, а с iptables контейнеры не могли даже пинговать друг друга. Если это ошибка добавленных правил Docker или существующих правил брандмауэра, я еще не исследовал. Но остановка firewalld и iptables на хосте заставила его работать.