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

Dockerfile复制文件夹至容器报错:找不到指定目录,求解决方案

Docker COPY命令找不到文件问题排查

项目结构

cfn-APP/
├── NETPAYMENTS/
│   ├── Config/
│   ├── Tests/
│   ├── Locators/
│   └── Dockerfile
├── PAYMENTS/
│   ├── Config/
│   ├── Tests/
│   ├── Locators/
│   └── Dockerfile
└── buildspec.yaml

问题重现

NETPAYMENTS目录下的Dockerfile内容:

FROM python:3.10
WORKDIR /usr/src/app
COPY . .
RUN echo Copying NETPAYMENTS folder....
COPY NETPAYMENTS /usr/src/app/NETPAYMENTS
RUN echo Copying other py files from root....
COPY ../*py .

构建时触发错误:

#8 [ 5/29] COPY NETPAYMENTS /usr/src/app/NETPAYMENTS
#8 ERROR: failed to calculate checksum of ref moby::hybzvap3grz7r41j6b6le6xss: "/NETPAYMENTS": not found

问题根源

  1. 构建上下文范围限制:当在NETPAYMENTS目录下执行docker build .时,Docker的构建上下文是当前的NETPAYMENTS目录,所有COPY命令的源路径只能指向该目录内的内容。你写的COPY NETPAYMENTS /usr/src/app/NETPAYMENTS,在NETPAYMENTS目录里并没有同名子文件夹,自然会提示找不到。
  2. 禁止访问上下文外文件:COPY ../*py .试图引用上级目录的文件,但Docker严格禁止访问构建上下文之外的内容,这行命令同样会执行失败。

解决方案

最优方案:从根目录构建,指定Dockerfile路径

  1. 切换到cfn-APP根目录执行构建命令:
    # 构建NETPAYMENTS镜像
    docker build -f NETPAYMENTS/Dockerfile -t netpayments-image .
    # 构建PAYMENTS镜像
    docker build -f PAYMENTS/Dockerfile -t payments-image .
    
  2. 修改NETPAYMENTS下的Dockerfile,适配根目录上下文:
    FROM python:3.10
    WORKDIR /usr/src/app
    # 复制整个NETPAYMENTS文件夹到容器工作目录
    COPY NETPAYMENTS/ ./NETPAYMENTS/
    # 复制根目录下的所有py文件
    COPY *.py ./
    # 如果需要同时复制PAYMENTS文件夹,添加以下行
    # COPY PAYMENTS/ ./PAYMENTS/
    
    PAYMENTS下的Dockerfile做类似修改即可。

原理说明

将构建上下文设为cfn-APP根目录后,NETPAYMENTS、PAYMENTS文件夹以及根目录的py文件都处于上下文范围内,COPY命令可以正确定位到这些资源,完成复制操作。

内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:31:16