Веб-сайт, размещенный локально в контейнере Windows Docker для Windows, недоступен через локальный хост

Я пытаюсь настроить контейнер Docker для Windows для создания и размещения простого статического веб-сайта с использованием lite-server и Sphinx. Сначала я запускаю контейнер.

$ docker run -it -p 8080:8080 -v "$(pwd):C:\src" website

А затем запустите lite-сервер.

$ yarn serve

Веб-сайт доступен с IP-адреса контейнера (например, http://172.26.141.28:8080), поэтому я знаю, что lite-server обслуживает контент, но я не могу получить доступ к контенту с помощью http://localhost:8080.

Как я могу открыть веб-сайт через localhost: 8080?

Мой Dockerfile выглядит следующим образом

FROM microsoft/windowsservercore

ENV chocolateyUseWindowsCompression false
RUN powershell -Command \
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

RUN choco install nodejs -y
RUN choco install yarn -y
RUN choco install python3 -y
RUN pip install sphinx
RUN pip install sphinx_rtd_theme

# https://github.com/nodejs/node/issues/8897#issuecomment-319010735
# Workaround for error An unexpected error occurred: "ENOENT: no such file or directory, lstat 'C:\\ContainerMappedDirectories'".
RUN mkdir C:\src
RUN powershell Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices' -Name 'S:' -Value '\??\C:\src' -Type String
WORKDIR 'S:\\'

EXPOSE 8080
CMD ["powershell"]

lite-сервер запускается с

"scripts": {
  "serve": "light-server -s ./build/html -p 8080"
},

Программного обеспечения:

  • Докер версии 17.06.2-ce, сборка cec0b72
  • Windows 10 (хост)
  • Windowsservercore (контейнер)

person Ryan Taylor    schedule 05.10.2017    source источник
comment
Это известная ошибка в контейнерах Windows, когда доступ к сопоставленному порту с локального хоста не работает. Попробуйте получить доступ к этому порту с внешней машины   -  person Gregory Suvalian    schedule 05.10.2017


Ответы (2)


Я не знаю, было ли обновление, но год назад это было ожидаемое поведение:

контейнеры и их порты доступны только через IP-адрес с NAT.

см.: https://github.com/docker/for-win/issues/204#issuecomment-258638899.

person lobsteropteryx    schedule 05.10.2017

В вашем файле докера указано, что вы предоставляете порт на 8080 и сопоставляете с 8091.

попробуйте запустить следующую команду,

docker run -it -p 8080:8080 -v Веб-сайт $(pwd):C:\src

Вы должны иметь возможность перейти к http://localhost:8080.

Надеюсь, поможет.

person Kannaiyan    schedule 05.10.2017
comment
Упс. 8091 была опечатка. С тех пор я исправил это. Я пробовал разные порты для хоста, 8080, 8091 и другие. Тот же результат, я не могу получить доступ к веб-сайту в контейнере через локальный хост: порт. - person Ryan Taylor; 05.10.2017