Intereting Posts
Использование одной и той же машины Docker на разных клиентских устройствах Не удается получить удаленный клиент Hazelcast для подключения к кластеру, работающему в контейнерах докеров Docker обновляет изображение при изменении dockerfile Объем гнезда для док-станции docker-compose oci runtime error запуск процесса контейнера вызвал сброс соединения с помощью одноранговой сети Docker связывает контейнер db с загрузкой весны и получает переменные среды ОШИБКА: hyperledger / fabric: make gotools: непризнанный путь импорта «golang.org/x/tools/go/gcexportdata» как планировать работу с мониторингом процессора, памяти, диска io и т. д. Как создать зависимые изображения Docker с помощью плагина Docker Maven? докер-терминал: ожидание IP-адреса принудительное обновление изображения докеров при обновлении в реестре / кубернете Измените владельца файла в запущенном контейнере Docker с прикрепленным томом в Windows Получение статуса ошибки при попытке загрузить мой кубернетовый блок Изображение docker скрывает мой исходный код? Ошибка 403 при попытке доступа к докционированным службам WCF

Ограничить доступ в Интернет к контейнеру докеров?

Каков наилучший способ ограничить доступ в Интернет к одному контейнеру докера, продолжая пересылку портов?

Мой текущий способ сделать это работает следующим образом:

sudo docker network create --internal --subnet 10.1.1.0/24 no-internet sudo docker run --name gitlab -d -p 80:80 -p 822:22 --restart always gitlab/gitlab-ce sudo docker network connect no-internet gitlab sudo docker network disconnect bridge gitlab 

Проблема в том, что если я перезапущу систему, порты больше не будут перенаправлены:

sudo docker ps перед перезагрузкой:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d2a062744ec gitlab/gitlab-ce "/assets/wrapper" 13 seconds ago Up 13 seconds (health: starting) 0.0.0.0:80->80/tcp, 443/tcp, 0.0.0.0:822->22/tcp gitlab 

sudo docker ps после перезагрузки:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d2a062744ec gitlab/gitlab-ce "/assets/wrapper" 12 minutes ago Up 2 minutes (healthy) gitlab 

Поэтому, если я правильно понял ваш сценарий, вы бы хотели, чтобы вы не делили сеть своего хоста с вашим контейнером gitlab, чтобы убедиться, что gitlab не может подключиться к Интернету. В то же время вы хотите поделиться сетью хоста, чтобы связать порт контейнера с вашей хост-системой. Это не работает, но для вас может быть приемлемым следующее: контейнеры докеров, использующие одну и ту же внутреннюю сеть, могут подключаться к открытым / опубликованным портам других контейнеров в одной сети.

Вы могли бы следовать этому подходу:

  • Запустите обратный прокси-сервер перед вашим контейнером gitlab
  • Обратный прокси является членом вашей внутренней сети и сети моста по умолчанию (которая включает в себя сеть хоста)
  • Это позволяет обратному прокси привязываться к порту хоста и перенаправлять запросы в ваш контейнер gitlab, в то время как gitlab по-прежнему не может получить доступ к Интернету

Я быстро приведу этот пример, надеюсь, что вы начнете:

docker network create --internal --subnet 10.1.1.0/24 no-internet

docker network create internet

docker-compose.yml :

 version: '2' services: whoami: image: jwilder/whoami container_name: whoami networks: - no-internet proxy: image: nginx:1.13-alpine container_name: proxy networks: - internet - no-internet volumes: - ./vhost.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" networks: internet: external: name: internet no-internet: external: name: no-internet 

vhost.conf :

 upstream whoami { server whoami:8000; } server { server_name localhost; listen 80; location / { proxy_pass http://whoami; } } 

Обратите внимание, что упомянутая выше internet сеть на самом деле не нужна, так как контейнер-докер совместно использует хост-сеть по умолчанию. Это просто, чтобы сделать вещи более ясными.

В приведенном выше примере откройте http://localhost/ и вы увидите ответ контейнера whoami сам контейнер whoami не сможет подключиться к Интернету.