Попадание ресурсов в частную сеть из контейнера Docker с использованием VPN

Я использую Docker 1.9.1 на OSX и подключен к своей частной рабочей сети с помощью Cisco AnyConnect VPN. Служба, которую я запускаю в контейнере Docker, подключается к БД в рабочей сети и недоступна изнутри контейнера, но доступна из-за пределов контейнера в OSX. Это также доступно изнутри контейнера, если я подключен напрямую к рабочей сети, а не через VPN. Я подозреваю, что мне, возможно, придется выполнить некоторые настройки сети с виртуальной машиной док-машины, но я не уверен, куда идти дальше.

3 ответа

Если вы используете Virtualbox в качестве гипервизора для докеров, я предлагаю вам установить сетевой режим как Bridged Adapter. Таким образом, ваша виртуальная машина будет подключена к сети индивидуально, как и ваша машина. Также для сбора дополнительной информации об устранении неполадок попробуйте выполнить команду ping хоста db из командной строки машины контейнера. использование docker exec -it <container-name> /bin/bash

Я столкнулся с этой проблемой сегодня и заставил AnyConnect работать без необходимости раздельного туннелирования или другого VPN-клиента, такого как OpenConnect. Все, что потребовалось, было немного переадресации порта.

Моя настройка

инструкции

  1. Приведенная выше конфигурация программного обеспечения была использована при тестировании.

  2. Убедитесь, что у вас не запущены виртуальные машины и вы отключены от VPN.

  3. Измените строку 47, чтобы указать небезопасный реестр или удалить параметр "--engine-insecure-registry:5000".

  4. Выполните следующее в оболочке на вашем Mac:

sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist

Обходной путь для MacOS Sierra. По какой-то причине включение NTP приводит к зависанию механизма докера. Увидеть:

https://forums.docker.com/t/docker-beta-for-mac-does-not-work-and-hangs-frequently-on-macos-10-12/18109/7

./docker-vpn-helper

Устанавливает переадресацию портов, восстанавливает сертификаты TLS.

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

export DOCKER_HOST=tcp://localhost:2376 export DOCKER_CERT_PATH=/Users/<username>/.docker/machine/machines/default export DOCKER_MACHINE_NAME=default

Подключитесь к вашему AnyConnect VPN и протестируйте докер:

docker run hello-world

Проверьте свою маршрутизацию внутри виртуальной машины Docker Machine с помощью

docker-machine ssh default
$ route -n

который выглядит так на свежей машине:

docker@default:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 1 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

Если вы создали много сетей, то есть с помощью docker-compose возможно, он создал маршруты к стекам, которые конфликтуют с маршрутами вашей VPN или локальной сети.

docker@dev15:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 1 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7400365dbd39 172.25.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4db568a601b4 [...] 192.168.80.0 0.0.0.0 255.255.240.0 U 0 0 0 br-97690a1b4313 192.168.105.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

TL; др

Должно быть безопасно удалить все сети, с

docker network rm $(docker network ls -q)

поскольку активные сети не удаляются по умолчанию... но, тем не менее, будьте осторожны при выполнении команд rm:)

Другие вопросы по тегам