Попадание ресурсов в частную сеть из контейнера 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. Все, что потребовалось, было немного переадресации порта.
Моя настройка
- MacOS Sierra 10.12
- VirtualBox 5.0.26
- Docker ToolBox 1.12.2
- Сценарий docker-vpn-helper, расположенный по адресу https://gist.github.com/philpodlevsky/040b44b2f8cee750ecc308271cb8d1ab
инструкции
Приведенная выше конфигурация программного обеспечения была использована при тестировании.
Убедитесь, что у вас не запущены виртуальные машины и вы отключены от VPN.
Измените строку 47, чтобы указать небезопасный реестр или удалить параметр "--engine-insecure-registry:5000".
Выполните следующее в оболочке на вашем Mac:
sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
Обходной путь для MacOS Sierra. По какой-то причине включение NTP приводит к зависанию механизма докера. Увидеть:
./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:)