我在下面有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
为什么当我有目录并且我的文件也存在时它会显示此错误。
这不起作用,因为test_input.txt
不在docker构建上下文中。
执行命令时sudo docker build -t myimage .
最后一个"."表示生成上下文。docker 所做的是将上下文上传到 docker 守护程序以构建映像。在您的情况下,上下文不包含test_input.txt
,因此不会上传,docker 找不到文件/
有两种方法可以解决此问题:
- 在测试目录中运行命令
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/
- 第二个选项是简单地将 Dockerfile 移动到测试文件夹并按上述方式修改它。在这种情况下,命令
sudo docker build -t myimage .
应该有效。
还要确保不要在.dockerignore file
中添加映像构建过程中所需的文件或文件夹。
因为test_input.txt在另一个目录中,所以要么把这个文件放在类似于test_output.txt dockerfile的位置,要么在ADD命令中给出完整路径
ADD ../configs/test_input.txt /test/configs/
即使对于日志文件.log这也会收到错误,因此请更改为
ADD ../logs/logfile.log /test/logs/