添加失败:构建 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

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

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

执行命令时sudo docker build -t myimage .最后一个"."表示生成上下文。docker 所做的是将上下文上传到 docker 守护程序以构建映像。在您的情况下,上下文不包含test_input.txt,因此不会上传,docker 找不到文件/

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

  1. 在测试目录中运行命令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/
  1. 第二个选项是简单地将 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/

最新更新