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
问题根源
- 构建上下文范围限制:当在NETPAYMENTS目录下执行
docker build .时,Docker的构建上下文是当前的NETPAYMENTS目录,所有COPY命令的源路径只能指向该目录内的内容。你写的COPY NETPAYMENTS /usr/src/app/NETPAYMENTS,在NETPAYMENTS目录里并没有同名子文件夹,自然会提示找不到。 - 禁止访问上下文外文件:
COPY ../*py .试图引用上级目录的文件,但Docker严格禁止访问构建上下文之外的内容,这行命令同样会执行失败。
解决方案
最优方案:从根目录构建,指定Dockerfile路径
- 切换到cfn-APP根目录执行构建命令:
# 构建NETPAYMENTS镜像 docker build -f NETPAYMENTS/Dockerfile -t netpayments-image . # 构建PAYMENTS镜像 docker build -f PAYMENTS/Dockerfile -t payments-image . - 修改NETPAYMENTS下的Dockerfile,适配根目录上下文:
PAYMENTS下的Dockerfile做类似修改即可。FROM python:3.10 WORKDIR /usr/src/app # 复制整个NETPAYMENTS文件夹到容器工作目录 COPY NETPAYMENTS/ ./NETPAYMENTS/ # 复制根目录下的所有py文件 COPY *.py ./ # 如果需要同时复制PAYMENTS文件夹,添加以下行 # COPY PAYMENTS/ ./PAYMENTS/
原理说明
将构建上下文设为cfn-APP根目录后,NETPAYMENTS、PAYMENTS文件夹以及根目录的py文件都处于上下文范围内,COPY命令可以正确定位到这些资源,完成复制操作。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

