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立了这个项目,但是ENTRYPOINT
path是错误的
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并运行你的容器。
- 了解VS2017 webform应用程序的docker-compose
- Ubuntu 16.10上的ASP.NET Core Docker端口转发
- Docker使用ASP.NET Core和PostgreSQL服务编写
- ASP.NET Core EF命令:无法连接到任何指定的MySQL主机
- Docker上的Asp.Net Core + SQL Server – 启动数据库的睡眠
- 不能将中间docker容器文件复制到主机
- 无法到达Docker中的Asp.Net Core
- Visual Studio 2017泊坞窗错误运行的应用程序
- 运行.net核心docker镜像,说应用程序启动了,但浏览时却给出了“This site can not be reached”的错误