Следуя документации 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 на хосте заставила его работать.