Сделать контейнер Docker доступным только с определенных IP-адресов / IP-подсети

#docker #networking #docker-compose

#docker #сеть #docker-compose

Вопрос:

Я настроил простой контейнер, который запускает веб-приложение с помощью docker-compose :

 version: '3'
services:
  app:
    image: app/app:latest
    ports:
    - "8000:80"
  

Теперь к этому приложению можно получить доступ отовсюду (!) с помощью http://server_ip:8000 .

Как я могу ограничить доступ к приложению только из выбранной подсети, например 123.123.0.0/16 ? Я попытался добавить порт в заданную зону с firewall-cmd помощью, но эти правила не применяются к контейнерам Docker, поскольку сам Docker записывает правила Iptable.

К сожалению, это не сработало:

 ports:
- "123.123.0.0/16:8000:80"
  

Комментарии:

1. Имеет ли сам хост несколько интерфейсов? Если это так, вы можете использовать соответствующий IP-адрес хоста в ports: ; если нет, то вам нужно сделать iptables или что-то подобное, сделайте это за вас.

2. Хост, то есть компьютер, на котором запущен контейнер, имеет несколько интерфейсов, да. К какому IP-адресу я должен обратиться? Использование localhost не устраняет проблему — порт «открывается миру».

3. Если у хоста есть интерфейсы 123.123.45.67 и 10.20.30.40 , используйте IP-адрес из интерфейса, который находится в той подсети, которую вы хотите прослушать.