首页 > 解决方案 > Docker 映像不起作用 - 构建时可能是错误的路径

问题描述

我正在尝试将 ASP.NET Core 项目移动到 docker linux 容器,但是我无法构建正确的映像。当我创建默认 dockerfile(通过 VisualStudio Add -> DockerSupport)时,它正在为所有项目设置 COPY 路径。但是,当我运行 docker build -t 时。它弹出错误“没有这样的文件或目录”。我试图坚持使用官方 docker 文档,将 asp.net 核心移动到 docker 容器,这是我结束的代码:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ./ ./
RUN dotnet restore "myproject.csproj"
COPY . .
WORKDIR "/src/myproject"
RUN dotnet build "myproject.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "myproject.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myproject.dll"]

这是我用来构建图像的命令:

docker build -t myapp -f myproject/Dockerfile .

我从父目录构建它,因为当我使用当前工作目录时,它没有找到所有 .csproj 文件。当我运行此图像时,它不起作用-我知道路径错误,但是我不知道逻辑错误在哪里。当前错误是“程序不包含适合入口点的静态'Main'方法”和“遇到致命错误。在'/app/'中找不到执行应用程序所需的库'libhostpolicy.so'。无法作为独立应用程序运行。如果这应该是依赖于框架的应用程序,请在 /app/myproject.runtimeconfig.json 中指定适当的框架"

标签: dockerasp.net-coredockerfile

解决方案


根据此文档尝试以下操作将myproject替换为项目名称

FROM microsoft/dotnet:sdk 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 -c Release -o out

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", “myproject.dll"]

然后使用以下命令构建并运行:

docker build -t myproject .
docker run -d -p 8080:80 --name myapp myproject

推荐阅读