Docker容器复制主机本地文件问题求助(VS2022环境)
问题分析与解决方案
你的Dockerfile存在两个核心问题导致文件复制失败:
错误使用主机绝对路径:Docker的
COPY指令只能访问构建上下文(即Dockerfile所在目录及其子目录)内的文件,无法直接读取主机的C://text.txt这类绝对路径。而且Linux容器内部使用类Unix路径格式,不存在C://这种Windows盘符路径。未将文件传递到最终运行镜像:即使你在
build阶段复制了文件,最终的final阶段仅从publish阶段复制了应用发布文件,之前阶段的文件不会自动继承到最终镜像中。
修正步骤
1. 调整文件位置
将主机上的test.txt放到Dockerfile所在的目录(或其子目录,比如项目根目录),确保它在构建上下文范围内。
2. 修改Dockerfile
以下是修正后的Dockerfile,以将test.txt复制到容器的/data目录(自定义非应用路径)为例:
FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src COPY ["Testing/Testing.csproj", "Testing/"] RUN dotnet restore "Testing/Testing.csproj" COPY . . WORKDIR "/src/Testing" RUN dotnet build "Testing.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Testing.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # 创建目标目录(如果镜像中不存在) RUN mkdir -p /data # 从构建上下文复制test.txt到容器的/data目录 COPY test.txt /data/test.txt ENTRYPOINT ["dotnet", "Testing.dll"]
关键说明
- 如果
test.txt位于Testing子目录下,复制指令应改为:COPY ["Testing/test.txt", "/data/test.txt"] - 目标路径可以根据需求修改,比如
/config/test.txt,只要确保通过RUN mkdir -p创建对应的父目录(避免路径不存在导致复制失败)
内容的提问来源于stack exchange,提问作者Nachd
相关产品推荐
相关产品推荐

