Docker上的Asp.Net Core

Xav*_* W. 2 asp.net docker asp.net-core

我目前正在尝试使用ASP.NET Core应用程序启动Docker组件.

我使用以下repo进行测试: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
Run Code Online (Sandbox Code Playgroud)

图像是可见的sudo docker images,但容器不会启动,并且不可见sudo docker ps:

在此输入图像描述

如果我浏览我的网站,显然我看不到数据.回购不利于我的测试吗?我在docker容器创建上有什么错误吗?

运行-it命令给我以下输出: 在此输入图像描述

R0M*_*RMY 6

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

1您还没有构建项目

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

publish: Published to /code/HelloWeb/bin/Debug/netcoreapp1.0/publish  
Published 1/1 projects successfully
Run Code Online (Sandbox Code Playgroud)

2您构建了项目,但ENTRYPOINT路径错误

COPY . .指令会将当前目录中的所有内容复制到您的app目录中.这意味着HelloWeb.dll实际上将bin/Debug/netcoreapp1.0/publish/(或bin/Release/...发布版本).

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

ENTRYPOINT ["dotnet", "bin/Debug/netcoreapp1.0/publish/HelloWeb.dll"]
Run Code Online (Sandbox Code Playgroud)

您的应用程序应该很乐意启动并提供请求.

选项2:修改您的COPY指令

项目发布后,运行它所需的一切都将在publish目录中.您可以将其内容复制到目录中,/app并且您的入口点将是正确的.这看起来像这样

FROM microsoft/aspnetcore

WORKDIR /app
COPY ./bin/Debug/netcoreapp1.0/publish/ .

EXPOSE 80

ENTRYPOINT ["dotnet", "HelloWeb.dll"]
Run Code Online (Sandbox Code Playgroud)

您可能还想添加该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.
Run Code Online (Sandbox Code Playgroud)

您也可以使用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"]
Run Code Online (Sandbox Code Playgroud)

并且您应该能够修改源代码并构建和运行容器.