Docker上的Asp.Net Core

我目前正在尝试启动一个ASP.NET核心应用程序的Docker组件。

我使用以下回购为我的testing: https : //github.com/aspnet/cli-samples

我跑了没有任何问题的以下指挥官:

git clone https://github.com/aspnet/cli-samples aspnet-Home cd aspnet-Home/HelloWeb cat Dockerfile FROM microsoft/aspnetcore WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "helloweb.dll"] sudo docker build –t helloweb . sudo docker run -d helloweb 

使用sudo docker images可以看到sudo docker images ,但是容器不能启动,而且在sudo docker ps不可见:

在这里输入图像说明

而且,如果我浏览我的网站,我看不到数据。 回购对我的testing不好吗? 我在docker容器创build上有任何错误吗?

运行-it命令给我以下输出: 在这里输入图像说明

您突出显示的错误是因为您设置为ENTRYPOINT不存在。 可能有两个原因

1你还没有build立这个项目

在这种情况下,您应该从项目主目录运行dotnet restore ,然后导航到HelloWeb目录并运行dotnet publish 。 当我运行这个命令时,我看到以下内容:

 publish: Published to /code/HelloWeb/bin/Debug/netcoreapp1.0/publish Published 1/1 projects successfully 

2你build立了这个项目,但是ENTRYPOINTpath是错误的

COPY . . 指令将从当前目录复制到您的app目录。 这意味着HelloWeb.dll实际上将在bin/Debug/netcoreapp1.0/publish/ (或bin/Release/... )中。

选项1:使用完整path修改入口点

 ENTRYPOINT ["dotnet", "bin/Debug/netcoreapp1.0/publish/HelloWeb.dll"] 

您的应用程序应该愉快地启动和服务请求。

选项2:修改您的COPY指令

一旦您的项目已经发布,您需要运行的所有内容都将位于publish目录中。 您可以将其内容复制到/app目录中,并且您的入口点将是正确的。 那看起来像这样

 FROM microsoft/aspnetcore WORKDIR /app COPY ./bin/Debug/netcoreapp1.0/publish/ . EXPOSE 80 ENTRYPOINT ["dotnet", "HelloWeb.dll"] 

您也可能想要添加EXPOSE指令来告诉Docker您的容器将在端口80上侦听。


当成功时,你应该看到(如果你运行在交互模式)

 docker run -it helloweb Hosting environment: Production Content root path: /app Now listening on: http://+:80 Application started. Press Ctrl+C to shut down. 

您也可以使用microsoft/dotnet:latest图像。 该图像附带了SDK安装和一个非常方便的run命令。 Dockerfile看起来像这样

 FROM microsoft/dotnet:latest COPY . /app WORKDIR /app RUN dotnet restore ENV ASPNETCORE_URLS http://*:5000 EXPOSE 5000 ENTRYPOINT ["dotnet", "run"] 

你应该能够修改你的源代码并构build并运行你的容器。