添加失败: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文件/
有两种方法可以解决这个问题:
- 在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/
- 第二个选项是简单地将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/