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

时间:2017-12-26 11:08:14

标签: docker

我在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

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

3 个答案:

答案 0 :(得分:13)

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

执行命令sudo docker build -t myimage .时最后一次&#39;。&#39;表示构建上下文。 docker所做的是它将上下文上传到docker deamon以构建图像。在您的情况下,上下文不包含test_input.txt,因此它不会上传,并且码头工具无法找到文件/

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

  1. 在测试目录内运行命令sudo docker build -t myimage -f code/Dockerfile .。在这种情况下,上下文包括所有测试目录。然后修改Dockerfile以考虑此更改:
  2. 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 :(得分:0)

还要确保不要在.dockerignore file中添加图像构建过程中所需的文件或文件夹。

答案 2 :(得分:-1)

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

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

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

ADD ../logs/logfile.log /test/logs/