【发布时间】:2020-04-04 21:31:14
【问题描述】:
我刚接触 Docker,试图在我的机器上运行一个概念验证容器。我使用命令dotnet new webapi 生成了一个.NET Core 3.0 Web API 项目。我添加了一个控制器端点,它只返回一个字符串“Hello World”。
using System;
using Microsoft.AspNetCore.Mvc;
namespace DockerHelloWorld.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
[HttpGet]
public string Get()
{
return "Hello World!";
}
}
}
我能够分别使用dotnet build 和dotnet run 成功构建和运行这个项目。
我现在正试图让它在 Docker 容器中运行。这是我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish --framework netcoreapp3 --configuration Release --output out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DockerHellWorld.dll"]
这是从here复制和稍微修改的。
我还有以下 .dockerignore,以防万一:
bin\
obj\
*.md
*.png
我运行以下命令:
docker build -t dockerhelloworldimage .
docker create -p 3000:80 --name dockerhelloworldcontainer dockerhelloworldimage
docker start dockerhelloworldcontainer
似乎每个步骤都是根据docker build 的输出运行的。在docker create 之后返回一个哈希,在docker run 之后返回“dockerhelloworldcontainer”。
容器立即停止。我通过使用docker container ls -a 命令看到了这一点。
docker logs dockerhelloworldcontainer 具有以下输出:“找不到任何已安装的 .NET Core SDK。您的意思是运行 .NET Core SDK 命令吗?从:https://aka.ms/dotnet-download 安装 .NET Core SDK”但我真的不知道如何理解。
值得一提的是,我在使用 .NET Core 2.2 应用时得到了与此非常相似的东西。
有什么想法吗?我可能会错过什么?
【问题讨论】:
-
我看到这里的 dll 名称有错字
ENTRYPOINT ["dotnet", "DockerHellWorld.dll"]它应该是DockerHelloWorld并且与您的项目名称匹配。