ADD失败:构建docker镜像时没有此类文件/目录

问题描述 投票:7回答:2

我在Dockerfile下面:

FROM python:3

RUN mkdir -p /test/code/
RUN mkdir -p /test/logs/
RUN mkdir -p /test/configs/

ADD test.py /test/code/
ADD test_output.txt /test/code/
ADD test_input.txt /test/configs/
ADD logfile.log /test/logs/


CMD [ "python3", "/test/code/test.py" ]

我的目录结构是:

/home/<username>/test/
                 |-> code/Dockerfile, test_output.txt, test.py
                 |-> logs/logfile.log
                 |-> configs/test_input.txt

当我使用以下命令构建docker镜像时:

sudo docker build -t myimage .

它显示以下错误:

Step 7/9 : ADD test_input.txt /test/configs/
ADD failed: stat /var/lib/docker/tmp/docker-builder562406652/test_input.txt: no such file or directory

为什么当我有目录并且我的文件也存在时它会显示此错误。

docker
2个回答
12
投票

这不起作用,因为test_input.txt不在docker build context

当你执行命令sudo docker build -t myimage .时,最后一个'。'表示构建上下文。 docker所做的是它将上下文上传到docker deamon以构建图像。在你的情况下上下文不包含test_input.txt,因此它没有上传和docker找不到文件/

有两种方法可以解决这个问题:

  1. 在测试目录内运行命令sudo docker build -t myimage -f code/Dockerfile .。在这种情况下,上下文包括所有测试目录。然后修改Dockerfile以考虑此更改:

FROM python:3
...    
ADD code/test.py /test/code/
ADD code/test_output.txt /test/code/
ADD config/test_input.txt /test/configs/
ADD logs/logfile.log /test/logs/
  1. 第二个选项是简单地将Dockerfile移动到测试文件夹并如上所述进行修改。在这种情况下,命令sudo docker build -t myimage .应该工作。

-1
投票

因为test_input.txt在另一个目录中,所以要将此文件放在dockerfile与test_output.txt类似的位置,或者在ADD命令中给出完整路径

ADD ../configs/test_input.txt /test/configs/

即使对于logfile.log,你也会收到错误,所以改为

ADD ../logs/logfile.log /test/logs/
© www.soinside.com 2019 - 2024. All rights reserved.