Dockerfile从Windows主机复制目录到Linux容器失败求助
解决Windows主机向Linux Docker容器复制文件的构建错误
我来帮你排查这个问题——你遇到的错误大概率是Docker构建上下文的限制导致的,咱们一步步拆解原因和解决方案:
核心问题:COPY指令的源路径规则
Docker的COPY指令使用的源路径,必须是构建上下文目录内的相对路径,而不是主机的绝对路径(比如你写的C:/temp/somedirectory)。Docker引擎在构建时,只会读取你指定的构建上下文里的文件,无法直接访问主机其他目录的文件。
具体解决方案
方案1:调整文件位置,使用相对路径
- 把你要复制的
C:\temp\somedirectory文件夹,复制到你的Dockerfile所在的目录下(比如Dockerfile在C:\docker-project,就把somedirectory放到C:\docker-project里)。 - 修改Dockerfile的COPY指令为相对路径:
FROM microsoft/powershell:latest RUN mkdir -p /tmp/powershell COPY ./somedirectory /tmp/powershell
- 在Dockerfile所在目录执行构建命令:
docker build -t my-custom-pwsh .
方案2:指定构建上下文目录
如果不想移动文件,你可以直接把C:\temp作为构建上下文,同时指定Dockerfile的位置:
- 保持Dockerfile的COPY指令改为上下文内的相对路径:
FROM microsoft/powershell:latest RUN mkdir -p /tmp/powershell COPY ./somedirectory /tmp/powershell
- 执行构建命令时,明确指定Dockerfile路径和构建上下文:
docker build -t my-custom-pwsh -f C:\path\to\your\Dockerfile C:\temp
这里-f参数指定Dockerfile的位置,最后一个参数C:\temp就是构建上下文,Docker会把这个目录下的所有文件发送给引擎,这样./somedirectory就能被正确识别。
额外注意事项
- 如果你用的是Docker Desktop for Windows,确保已经开启了文件共享(在设置里勾选C盘或对应的目录),否则Docker引擎可能无法访问主机的文件目录。
- 由于目标容器是Linux环境,路径用
/tmp/powershell是正确的,不用改成Windows格式。
内容的提问来源于stack exchange,提问作者Moerwald
相关产品推荐
相关产品推荐

