Как получить доступ к порту контейнера/сервиса в swarm не публикуя порт во внешний мир
Можно в docker-compose сделать проброс порта в контейнер только с localhost, прописав в docker-compose.yml нужную кофигурацию ports, например 127.0.0.1:8080:80.
В docker swarm такое не работает, и опубликованный порт виден из интернета.
Как тогда получить доступ к порту контейнера только с localhost, не открывая доступ к порту в интернет?
Пробовал настроить iptables на запрет подключения к порту iptables -A INPUT -p tcp --dport 5432 -j DROP, но из-за настроек от docker для iptables, такое не сработало.
Контекст задачи такой, у меня есть контейнер с postgres, и я бы хотел подключась через ssh тунель к удаленному серверу подключиться к БД с моего компа. Знаю что можно установить что-то вроде adminer рядом с самой БД, и его уже выводить через reverse-proxy в веб. Но есть более удобное для меня приложение ValentinaStudio, через которое хотелось бы подключаться к БД
Ответы (1 шт):
К контейнеру можно обратиться через ip, который принадлежит интерфейсу docker_gwbridge.
Узнать ip адрес контейнера в интерфейсе docker_gwbridge мне удалось запуском команды ifconfig в самом контейнере:
$ docker exec <container-id> ifconfig
Таким образом доступ к контейнеру можно получить с localhost, например, по 172.18.0.2:5432, без необходимости опубликовывать порт 5432.
Попытка узнать ip адрес через docker inspect <container-id> (or <service-name> or <network-id>) в swarm сервисах не привели к желаемому результату, т.к. там не отображался ip из интерфейса docker_gwbridge. А "внутренние" ip (что-то вроде 10.0.4.6) были не доступны с localhost.