[英]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 容器创建上有什么错误吗?
你强调的错误是因为helloweb.dll
你设置为ENTRYPOINT
不存在。 可能有两个原因
在这种情况下,您应该从项目主目录运行dotnet restore
,然后导航到HelloWeb
目录并运行dotnet publish
。 当我运行此命令时,我看到以下内容:
publish: Published to /code/HelloWeb/bin/Debug/netcoreapp1.0/publish
Published 1/1 projects successfully
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.