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