You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile从Windows主机复制目录到Linux容器失败求助

解决Windows主机向Linux Docker容器复制文件的构建错误

我来帮你排查这个问题——你遇到的错误大概率是Docker构建上下文的限制导致的,咱们一步步拆解原因和解决方案:

核心问题:COPY指令的源路径规则

Docker的COPY指令使用的源路径,必须是构建上下文目录内的相对路径,而不是主机的绝对路径(比如你写的C:/temp/somedirectory)。Docker引擎在构建时,只会读取你指定的构建上下文里的文件,无法直接访问主机其他目录的文件。

具体解决方案

方案1:调整文件位置,使用相对路径

  1. 把你要复制的C:\temp\somedirectory文件夹,复制到你的Dockerfile所在的目录下(比如Dockerfile在C:\docker-project,就把somedirectory放到C:\docker-project里)。
  2. 修改Dockerfile的COPY指令为相对路径:
FROM microsoft/powershell:latest
RUN mkdir -p /tmp/powershell
COPY ./somedirectory /tmp/powershell
  1. 在Dockerfile所在目录执行构建命令:
docker build -t my-custom-pwsh .

方案2:指定构建上下文目录

如果不想移动文件,你可以直接把C:\temp作为构建上下文,同时指定Dockerfile的位置:

  1. 保持Dockerfile的COPY指令改为上下文内的相对路径:
FROM microsoft/powershell:latest
RUN mkdir -p /tmp/powershell
COPY ./somedirectory /tmp/powershell
  1. 执行构建命令时,明确指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:57:06