繁体   English   中英

Docker 上的 Asp.Net Core

[英]Asp.Net Core on Docker

我目前正在尝试使用 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

使用sudo docker images可以看到sudo docker images ,但容器不会启动,并且使用sudo docker ps不可见:

在此处输入图片说明

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

运行-it命令给我以下输出: 在此处输入图片说明

你强调的错误是因为helloweb.dll你设置为ENTRYPOINT不存在。 可能有两个原因

1 你还没有构建项目

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

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

2 你建了工程,但是ENTRYPOINT路径不对

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

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

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"]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM