添加失败:build立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 

当我使用下面的命令构builddocker镜像时:

 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 

为什么它显示这个错误,当我有目录,我的文件也存在。

这不起作用,因为test_input.txt不在test_input.txt 构build上下文中 。

当你执行命令sudo docker build -t myimage . 最后 '。' 表示构build上下文。 Docker做的是把上下文上传到docker deamon来构build镜像。 在你的情况下,上下文不包含test_input.txt ,因此它不会被上传和docker不能find文件/

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

  1. 在test目录下运行命令sudo docker build -t myimage -f code/Dockerfile . 。 在这种情况下,上下文包括所有的testing目录。 然后修改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移动到testing文件夹,并按照上面的方式修改它。 在这种情况下,命令sudo docker build -t myimage . 应该pipe用。

由于test_input.txt位于另一个目录中,因此可以将此文件放在dockerfile与test_output.txt类似的地方,或者在ADD命令中给出完整path

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

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

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