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容器创建上有什么错误吗?
您突出显示的错误是因为helloweb.dll您设置为ENTRYPOINT不存在.可能有两个原因
在这种情况下,您应该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)
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)
并且您应该能够修改源代码并构建和运行容器.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |