我正在Windows 2016 Server上使用Docker构建ASP.NET Web API应用程序。
这是我的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
然后我用容器的沙箱ID运行docker check
docker inspect 5638e
它显示了我有关容器的信息,但IP地址列键为空。 如何找到IP地址,这里出了什么问题?
答案 0 :(得分:0)
没关系:这个IP地址(如果存在)对于大多数目的来说是无用的。您无法从Docker空间外部可靠地访问它,并且无法从另一个容器Docker提供DNS服务,以便通过其docker run --name
名称可以访问该容器。
如果您尝试建立从主机(可能是浏览器)上的某个内容到容器的连接,则您的--publish 80
选项将使Docker选择一个端口并将其转发到容器中的端口80。那应该在docker inspect
输出(under "NetworkSettings")中。不过,更典型的是自己选择端口:如果您--publish 8765:80
,则知道主机上的端口8765。 (这通常缩写为-p
。)
您通常不需要运行docker inspect
。它通常不会告诉您使用docker run
命令尚不了解的任何内容。