docker - 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 中指定适当的框架"
解决方案
根据此文档尝试以下操作将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
推荐阅读
- swift - 如何在 Swift 的子类中调用委托的函数?
- javascript - 替换数组中多个字符串上的单词
- matlab - 如何分配给由向量索引的一些向量元素?
- rxjs - 每当几个可观察对象之一发出一个值时发出一个值,即使不是所有的都还没有?
- ssl - 由于 Outlook.office365.com 上的对等重置导致 TLS 1.2 握手失败
- javascript - 选择菜单项时保持悬停颜色变化
- acumatica - Acumatica 稍后更新批次/序列号详细信息
- python - Python 字符串/参数操作
- python - CircleCI 没有拾取运行步骤中定义的环境变量?
- c# - 用于动态调用的错误泛型重载