如何使用 Dockerfile 将目录从 docker 容器复制到主机?
How to copy a directory from docker container to host using Dockerfile?
我正在使用以下 Docker 文件构建一个使用 docker 容器的 asp.net 项目。
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY . .
WORKDIR "/src/IdentityANSP/"
RUN dotnet build "IdentityANSP.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "IdentityANSP.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "IdentityANSP.dll"]
此处,构建的工件将放置在新的 docker 图像中。相反,我希望将工件复制到 Docker 主机 (localhost) 中的目录。为此,我应该如何更改 Docker 文件?
PS:我是 Docker 和 Whosebug 的新手。所以,请忽略我在问题中的错误。谢谢
长话短说(有关详细信息,请参阅 this 答案),您无法使 Dockefile 提取构建工件。但是,您可以从 运行 容器中复制文件:
# Build the image
docker build -t my_image .
# Spin up a container from the image
docker run --rm -d --name my_temporary_container my_image
# Copy file
docker cp my_temporary_container:/path/in/container /host/path
# Stop the container
docker stop my_temporary_container
如果有问题的图像需要很长时间才能启动或需要一些外部 files/variables/etc,您可以覆盖默认命令,这样它就会优雅地什么都不做:
# Start a container that endlessly reads its own stdout stream
docker run --rm -d --name my_temporary_container --entrypoint="" my_image /bin/cat /dev/stdout
我正在使用以下 Docker 文件构建一个使用 docker 容器的 asp.net 项目。
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY . .
WORKDIR "/src/IdentityANSP/"
RUN dotnet build "IdentityANSP.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "IdentityANSP.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "IdentityANSP.dll"]
此处,构建的工件将放置在新的 docker 图像中。相反,我希望将工件复制到 Docker 主机 (localhost) 中的目录。为此,我应该如何更改 Docker 文件?
PS:我是 Docker 和 Whosebug 的新手。所以,请忽略我在问题中的错误。谢谢
长话短说(有关详细信息,请参阅 this 答案),您无法使 Dockefile 提取构建工件。但是,您可以从 运行 容器中复制文件:
# Build the image
docker build -t my_image .
# Spin up a container from the image
docker run --rm -d --name my_temporary_container my_image
# Copy file
docker cp my_temporary_container:/path/in/container /host/path
# Stop the container
docker stop my_temporary_container
如果有问题的图像需要很长时间才能启动或需要一些外部 files/variables/etc,您可以覆盖默认命令,这样它就会优雅地什么都不做:
# Start a container that endlessly reads its own stdout stream
docker run --rm -d --name my_temporary_container --entrypoint="" my_image /bin/cat /dev/stdout