在Docker容器中我的源代码在哪里?

3
我使用以下 Docker 脚本来构建和运行我的 .NET 4.6.1 框架上的 ASP.NET Web API 项目。
FROM microsoft/dotnet-framework:4.7.2-sdk AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY TestWebAPI/*.csproj ./TestWebAPI/
COPY TestWebAPI/*.config ./TestWebAPI/
RUN nuget restore

# copy everything else and build app
COPY TestWebAPI/. ./TestWebAPI/
WORKDIR /app/TestWebAPI
RUN msbuild /p:Configuration=Release


FROM microsoft/aspnet:4.7.2 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/TestWebAPI/. ./

第一步,我将应用文件夹设置为我的工作目录。但是在创建容器后,我在我的C:驱动器上没有看到任何名为“app”的文件夹。

--To create Image
docker image build --tag testwebapi --file .\Dockerfile .

--To run container
docker container run --detach --publish 80 testwebapi

--To see containers content
docker exec -i -t a1da40af6b3c powershell

enter image description here

Where does docker keep the source code?


它并不一定会保留所有内容,只会保留明确使用 COPYADD 命令添加的内容。如果您将二进制可执行文件添加到镜像中,通常源代码和构建工具不会被包含在内。 - David Maze
1个回答

3
你可以在找到你的文件。
请注意,你的有两个行:
FROM microsoft/dotnet-framework:4.7.2-sdk AS build
...
FROM microsoft/aspnet:4.7.2 AS runtime

这是使用一个比较新的 Docker 功能,被称为多阶段构建。基本上,只有第二个(也是最后一个)阶段的指令决定了将什么内容复制到实际的镜像中:

WORKDIR /inetpub/wwwroot
COPY --from=build /app/TestWebAPI/. ./

请注意,--from=build 引用的是第一阶段的输出 - 可以将其视为临时镜像。 /inetpub/wwwroot 是第二阶段的 WORKDIR,因此您可以在那里找到来自最终 COPY 步骤的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接