Сеть с Docker на Windows

Я использовал это официальное руководство для настройки Docker на компьютере с Windows 7:

https://docs.docker.com/windows/started/

Я успешно вытащил изображение из центра док-станции, и я могу запустить свой собственный образ докера.

Нет, я застрял, пытаясь запустить и получить доступ к веб-серверу с помощью докера в Windows. Видимо, позади boot2docker Я не могу добраться до своего контейнера докера так, как я привык.

Как только я добавил -p 3007:80 к docker run команда, переадресация порта была обнаружена в списке контейнеров (docker ps) как 0.0.0.0:3007 -> 80, И с -p 127.0.0.1:3007:80 Я получаю более значимый IP-адрес. Однако я не могу добраться до контейнера с помощью браузера на хосте Windows.

Более того, docker inspect не показывает IP-адрес для работающего контейнера (который также кажется неправильным).

Я тоже пробовал --net=host но безрезультатно.

2 ответа

Решение

С появлением Docker Toolbox все немного изменилось. Теперь вы напрямую не взаимодействуете с boot2docker, но вместо этого использовать docker-machine, Хотя boot2docker все еще существует в качестве виртуальной машины, CLI-Tool больше нет. Он был заменен Docker Machine.

Таким образом, вы сможете получить IP-адрес виртуальной машины, набрав: docker-machine ip <machine-name>, Если у вас есть установка по умолчанию, ваше имя машины будет default,

С docker-machine active Вы можете посмотреть, какая виртуальная машина в данный момент активна. С этим именем вы также можете использовать docker-machine inspect <machine-name>,

Вы можете найти больше информации о Docker Machine в официальных документах.

К настоящему времени ситуация изменилась не просто так: Docker изначально поддерживает Windows, и Boot2Docker или Docker Toolbox больше не нужны. Вы должны начать с Windows 10 (или Windows Server 2016) сейчас.

На протяжении всего моего путешествия по Docker в Windows я разработал наилучшую практику проверки доступности веб-сервера:

  1. Запустите свой контейнер (например, с вашим упомянутым docker run -d -p hostport:containerport imagename)
  2. Оболочка в контейнер (например, с контейнером Windows: docker exec -it containerName powershell или же docker exec -it containerName bash, если вы используете контейнеры Linux) и проверьте, если iwr http://localhost:80 -UseBasicParsing дает вам красивый HTML и HTTP статус 200
  3. Если 2. все прошло нормально (и только тогда), проверьте IP вашего контейнера (например, с помощью docker network inspect dockerNetworkName, который предоставит вам все данные ваших контейнеров, включая внутренние IP-адреса), и укажите вашему браузеру http://containerIP:containerPort,
  4. Если 3. все прошло нормально (и снова: только тогда), проверьте, можете ли вы связаться с вашим веб-сервером с http://localhost:containerPort (это может не работать для контейнеров Windows, потому что не работает петля localhost - хотя она может работать на более новых версиях Windows 10/Server 2016)
  5. Последний шаг (если 1., 2. и 3. прошел нормально, 4. необязательно), попробуйте поискать свой веб-сервер вне хоста Windows (например, если вы используете хост Windows внутри Virtual Box, обратите внимание на конфигурацию переадресации портов!)
Другие вопросы по тегам