"already exists and is not an empty directory" 使用 Docker 的空目录



我一直在研究一个docker映像,该图像从github repo中摘下必要的文件,然后构建自身。它旨在每次仅从github更新,但是要测试它,我每次运行时都在删除整个GitHub repo文件夹。

删除文件夹后,我开始获得

致命:目的地路径'project-4'已经存在,不是一个 空目录。

dockerfile的内容(构建图像的文件)是:

FROM python:3.7
WORKDIR /usr/src/app
CMD ["sh", "-c", "git clone https://github.com/nathanhtaylor/Project-4.git && cd ./Project-4 && pip install -r requirements.txt && python server.py"]

该计算机上的任何地方都没有目录Project-4。无论图像输出什么文件夹,都会发生此错误。运行git clone http://github.com/nathanhtaylor/Project-4.git手动工作正常。

您构建Docker映像的方式存在缺陷。Docker映像应该是不变的,即一旦构建它们,就应该只能使用构建的可执行文件来运行它而不是更改它。Docker图像是并且可以像您的源代码一样版本。

在您的示例中,您正在尝试完成构建过程,在CMD中获得依赖项和执行,这违反了必须使用如何以及为什么使用容器的原则以及他们试图解决的问题。

我建议阅读本文,以了解为什么需要不变性

https://medium.com/sroze/why-i-think-we-nould-should-all-sel-mimmutable-docker-images-images-9f4f4fdcb5212f

至于您的Dockerfile,我建议您将其更改以获取GIT存储库和要求,作为Docker构建步骤和CMD的一部分,并且仅保留可执行文件。

在您说明的情况下,理想情况下,您的CI(连续集成)或任何其他管道都应有一个阶段,如果您的远程GIT存储库具有任何更改和版本,则可以从头开始重建Docker Image。P>

另外,此链接有一种使用远程git存储库来构建docker图像的好方法,如果您不想使用ci管道,这些链接可能在您的情况下很有用。

最新更新