如何将本地桌面的文件添加或复制到Dockerfile构建流程中
操作步骤
Docker 构建过程仅能访问构建上下文(即你执行docker build命令时指定的目录)内的文件,无法直接读取系统桌面这类上下文外的路径,因此可按以下两种方案操作:
方案一(推荐:构建性能更好)
- 第一步:将桌面上的
file.txt手动移动/复制到和你当前Dockerfile同级的目录下 - 第二步:替换Dockerfile中
# COPY ...注释行为以下内容,即可把文件复制到镜像内的/app工作目录:
COPY file.txt ./
如果你需要把文件放到镜像内的其他路径,比如
/config/file.txt,直接修改目标路径即可:COPY file.txt /config/
方案二(无需移动原文件)
如果你不想改动桌面上file.txt的位置,可以在执行构建命令时指定桌面为构建上下文:
- 假设你的Dockerfile存放在
/home/你的用户名/project/目录下,直接打开终端执行以下命令即可:
# 先切换到桌面目录 cd ~/Desktop # 指定Dockerfile路径执行构建 docker build -f /home/你的用户名/project/Dockerfile -t 你的镜像名 .
- Dockerfile的COPY指令还是和方案一一致,写
COPY file.txt ./即可。
注意事项
你当前把COPY指令放在最终的runtime阶段是完全正确的:如果file.txt仅在程序运行时使用,不需要放到上方的build-env构建阶段,这样可以避免额外占用镜像空间。
修改后完整Dockerfile示例
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build-env WORKDIR /app COPY *.csproj ./ RUN dotnet restore COPY . ./ RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim WORKDIR /app COPY --from=build-env /app/out ./ # 复制file.txt到镜像的/app目录 COPY file.txt ./ RUN useradd -ms /bin/bash moduleuser USER moduleuser ENTRYPOINT ["dotnet", "csharpexamplemodule.dll"]
验证方法
构建完成后可执行以下命令,确认文件是否成功复制到镜像内:
docker run --rm --entrypoint ls 你的镜像名 /app
输出结果里能看到file.txt就说明操作成功。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

