Windows Networking Stack Limitation对Windows Docker容器造成严重限制。
参考视频
docker run -it --rm -p ${host_computer_port}:${container_port} --name ${container_name} ${image_name}
命令示例:
docker run -it --rm -p 5000:8090 --name dockerwebapp9172020c dockerwebapp9172020
以上命令是什么意思?
你的机器端口(5000)被映射到容器端口(8090),这并不意味着运行在容器中的应用程序正在监听端口:8090。请参见下面的Docker文件,了解如何将容器端口映射到应用程序端口。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 8090
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
WORKDIR /src
COPY ["DockerWebApp/DockerWebApp.csproj", "DockerWebApp/"]
RUN dotnet restore "DockerWebApp/DockerWebApp.csproj"
COPY . .
WORKDIR "/src/DockerWebApp"
RUN dotnet build "DockerWebApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DockerWebApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_URLS http://*:8090
ENTRYPOINT ["dotnet", "DockerWebApp.dll"]
测试
Windows 网络堆栈限制将不允许直接运行以下命令。
http://localhost:5000
让我们来看第一个解决方案。
解决方案-1 直接命中容器。(在PowerShell或命令提示符下使用以下命令)
ps c:/>docker inspect f31e8add55af
从“NETWORKS”节点找到容器的IP地址,并在浏览器中运行该命令。
http://{container IP}:8090
解决方法2:来自Windows主机
首先找到您的计算机IP地址。
c:\>ipconfig
一旦您找到了机器的IP地址,请运行以下命令。
http://{Your Machine IP}:5000
由于5000被映射到容器端口(8090),而asp.net core应用程序也在容器内监听8090端口。
参考:Windows容器和Docker: 101
docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
,你将 Docker 容器内部的端口5000映射到了外部的端口80。也就是说,当你访问容器的IP地址时,它会将你的请求转发至5000端口。请注意,此命令为Docker运行命令,而不是解释说明。 - Jamie Taylor