【发布时间】:2018-01-24 14:08:56
【问题描述】:
我正在使用参考:https://docs.docker.com/engine/examples/dotnetcore/#prerequisites 创建以下Dockerfile:
FROM microsoft/aspnetcore-build:2.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 -c Release -o out
# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
但是我有以下解决方案结构:
.sln
Dockerfile
------------WebAPP
------------WebAPP.Domain
然后我修改了Dockerfile,以便我可以定位我的 WebAPP csproj 等。
FROM microsoft/aspnetcore-build AS builder
WORKDIR /app
# copy csproj and restore as distinct layers
COPY ./WebAPP/*.csproj ./
RUN dotnet restore
# copy everything else and build
COPY ./WebAPP ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/aspnetcore
WORKDIR /app
COPY --from=builder /app/out ./
ENV ASPNETCORE_ENVIRONMENT Production
ENTRYPOINT ["dotnet", "WebAPP.dll"]
但是它在dotnet publish 步骤上失败了,因为它缺少有意义的域项目。我还添加了RUN dotnet build 步骤,以确保我拥有所有依赖项和 dll,但我在倒数第二步确实失败了:
Step 10/12 : COPY --from=builder /app/out ./
COPY failed: stat /var/lib/docker/aufs/mnt/9b7dda771a5bf433365f513a2bfe4cfae4199402b35c95d5f81c57367cdbb788/app/out: no such file or directory
这里有什么我遗漏的吗?
【问题讨论】:
-
您是否发现文件夹 /app/out 存在于 builder 阶段?
-
它确实存在,因为同一个文件适用于单个项目解决方案。它也基于官方文档的 dockerfile - 所以除非他们的示例中有错误,否则它应该存在并且可以工作
-
我不是 .net 专家,但我认为命令
dotnet publish -c Release -o out必须在工作目录(应用程序)的 out 文件夹中生成输出。可能是这个命令没有生成任何东西。为了正确分析错误来源,您能否在构建阶段添加此RUN mkdir out。
标签: asp.net-core .net-core dockerfile