我在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
为什么当我有目录并且我的文件也存在时它会显示此错误。
答案 0 :(得分:13)
这不起作用,因为test_input.txt
不在docker build context中。
执行命令sudo docker build -t myimage .
时最后一次&#39;。&#39;表示构建上下文。 docker所做的是它将上下文上传到docker deamon以构建图像。在您的情况下,上下文不包含test_input.txt
,因此它不会上传,并且码头工具无法找到文件/
有两种方法可以解决这个问题:
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/
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/