docker - ASP.NET Core 3.0 Docker 容器端口映射失败
问题描述
我正在尝试从我的 Windows 10 机器上的 Docker 容器中运行一个全新的 ASP.NET 核心 MVC Web 应用程序。
我不是 docker 专家,但端口似乎没有绑定到主机上。我从容器内得到响应,但不是来自主机。2.2 示例对我来说很好。
dotnet --version
3.0.100-preview6-012264
重现步骤:
mkdir aspnetcore3_test
cd .\aspnetcore3_test\
mkdir aspnetapp
cd .\aspnetapp\
dotnet new mvc
cd ..
dotnet new sln
dotnet sln "aspnetcore3_test.sln" add "aspnetapp/aspnetapp.csproj"
创建一个包含以下内容的 docker 文件:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore ./aspnetapp/*.csproj
# copy everything else and build app
COPY aspnetapp/ ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
EXPOSE 80
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
然后做 docker 位:
docker build -t dockertest .
docker run --rm -it --name=dockertest dockertest:latest -p 80:80
Docker 运行输出以下内容:
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {5b22d641-4632-4440-8f7d-8ad9b5e48098} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
随着容器运行 Firefox 说它无法连接并docker port dockertest
出现空
docker exec -i -t dockertest curl localhost
吐出模板 MVC 应用程序 HTML
解决方案
通过在图像名称-p 80:80
之后添加,您实际上是-p 80:80
作为图像可执行文件的 args 传递的,而不是作为 docker 本身的 arg 传递。解决方案是将其移至图像名称之前:
docker run --rm -it --name=dockertest -p 80:80 dockertest:latest
推荐阅读
- singularity-container - 奇点和内部动态库
- php - 在 Symfony 中通过 ajax 为 ArrayCollection 数据传递 POST json 对象
- cmd - 任务调度程序的程序或脚本应该是什么
- javascript - HTML如何在按钮单击时添加唯一的输入元素
- python-3.x - 为什么 tkinter 小部件没有出现在 vscode 中?
- python - 使用 Azure IoT 中心的数据
- javascript - 在对话框中渲染过滤器组件
- amazon-web-services - 有没有办法列出历史上在 AWS 账户上使用的所有服务(不包括云跟踪)
- bash - 如何在 kubernetes 中使用 curl 发布请求获取 shell?
- python - Python pexpect.pxssh.ExceptionPxssh:密码被拒绝