Докер Межконтейнерное общение на CentOS 7
Я настраиваю архитектуру микросервисов, используя докер для каждого сервиса. Я также использую шлюз API kong, работающий в собственном док-контейнере. Докер-хост - это Centos 7, работающий на виртуальной машине с IP 192.168.222.76.
В командной строке хоста я могу получить доступ к стартовой службе через порт 7000 нормально. Однако в виртуальной машине kong я пропингую IP-адрес, но не могу получить доступ к сервису. Как вы можете видеть из вывода ниже, он говорит: "Хост недоступен".
Я запускаю docker с --icc=true и --iptables=true, и я внес несколько предложенных изменений в правила firewalld и rich и т. Д., Но я по-прежнему не могу получить доступ к другому контейнеру из контейнера kong.
Я запускаю контейнер kong с именованной сетью "kong-net", и база данных kong находится в той же сети докеров, и ОНИ, кажется, могут общаться. Я добавил свой стартовый сервисный контейнер в ту же сеть при запуске, но до сих пор не радуюсь. Контейнер kong МОЖЕТ получить доступ к внешнему миру, но не к другим контейнерам-докерам на одном хосте.
Выход ниже:
[root @ docker ~] # clear
[root @ docker ~] # curl 192.168.222.76:7000/starter/hello
Привет Аноним!
[root @ docker ~] # docker exec -it kong / bin / ash
# curl 192.168.222.76:7000/starter/hello
curl: (7) Не удалось подключиться к порту 19000 192.168.222.76: узел недоступен# curl www.google.com
HTML вернулся правильно...
Любая помощь по этому вопросу приветствуется!
2 ответа
Я смог заставить ICC работать, отключив firewalld все вместе (остановка, отключение, маска с помощью systemctl) и открыв все в iptables. Теперь нужно просто установить правила, блокирующие входящий доступ, кроме шлюза API и SSH.
Спасибо!
Вы должны добраться до другого контейнера с его именем контейнера. Попробуй это:
docker exec -t kong curl servicename:7000/starter/hello
Контейнерные и сервисные контейнеры Kong должны находиться в одной сети
Я сталкивался с этой проблемой раньше. Если отключение брандмауэра решает проблему, НЕ оставляйте брандмауэр отключенным, это очень большая проблема безопасности. Правильный способ сделать это - сначала повторно активировать брандмауэр, а затем добавить маскировку сети.
firewall-cmd --zone=public --add-masquerade --permanent