Докер инспектирует не раскрывая IP-адрес приложения - PullRequest
0 голосов
/ 06 января 2019

Я создаю приложение веб-API ASP.NET, используя Docker на сервере Windows 2016.

Вот так выглядит мой dockerfile:

FROM microsoft/dotnet-framework:4.7.2-sdk AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY TestWebAPI/*.csproj ./TestWebAPI/
COPY TestWebAPI/*.config ./TestWebAPI/
RUN nuget restore

# copy everything else and build app
COPY TestWebAPI/. ./TestWebAPI/
WORKDIR /app/TestWebAPI
RUN msbuild /p:Configuration=Release


FROM microsoft/iis:10.0.14393.206

SHELL ["powershell"]


FROM microsoft/aspnet:4.7.2 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/TestWebAPI/. ./

RUN Remove-Website -Name 'Default Web Site'
RUN New-Website -Name 'TestWebApi' -Port 80 \
    -PhysicalPath 'c:\inetpub\wwwroot' -ApplicationPool '.NET v4.5'
EXPOSE 80

CMD Write-Host IIS Started... ; \
    while ($true) { Start-Sleep -Seconds 3600 }

Затем я выполнил следующие команды для сборки и запуска контейнера:

docker image build --tag testwebapi --file .\Dockerfile .

docker container run --detach --publish 80 testwebapi

Затем я запустил проверку докера с идентификатором песочницы контейнера:

 docker inspect 5638e

enter image description here

Он показал мою информацию о контейнере, но ключ столбца IP-адреса был пуст. Как я могу найти IP-адрес и в чем здесь проблема?

enter image description here

1 Ответ

0 голосов
/ 06 января 2019

Неважно: этот IP-адрес, если он существует, бесполезен для большинства целей. Вы не можете надежно добраться до него из-за пределов пространства Docker, а из другого контейнера Docker предоставляет службу DNS, так что контейнер доступен по его docker run --name имени.

Если вы пытаетесь установить соединение с чем-то на хосте (возможно, браузером) с контейнером, ваша опция --publish 80 заставляет Docker выбрать порт и перенаправить его на порт 80 в контейнере. Это должно быть в выводе docker inspect ( в «NetworkSettings» ). Однако более типично выбрать порт самостоятельно: если вы --publish 8765:80, то вы знаете, что это порт 8765 на хосте. (Это очень часто сокращается до -p.)

Вам обычно не нужно запускать docker inspect. Обычно он не скажет вам ничего, чего вы еще не знаете из команды docker run.

...