我一直在做一个Docker映像,从github回购中提取必要的文件,然后构建自己。它只打算每次从github更新自己,但为了测试它,我每次运行github回购文件夹时都会删除整个github回购文件夹。
删除文件夹后,我开始
致命:目标路径‘Projec-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很好。
发布于 2019-03-22 08:46:23
在建立您的码头形象的方式上有一个缺陷。Docker映像应该是不可变的,也就是说,一旦您构建了它们,您应该只能使用已构建的可执行文件来运行它,而不是更改它。Docker映像是和可以版本化的,就像您的源代码。
在您的示例中,您试图在CMD中完成构建、获取依赖关系和执行的过程,这违背了容器必须如何使用和为什么使用以及它们试图解决的问题的原则。
我建议阅读这篇文章来理解为什么不变性是必需的。
https://medium.com/sroze/why-i-think-we-should-all-use-immutable-docker-images-9f4fdcb5212f
至于您的Dockerfile,我建议您将其更改为获得git存储库和需求,作为docker构建步骤的一部分,而不是CMD,并且只保留可执行文件。
在您所述的场景中,理想情况下,如果您的远程git存储库有任何更改并相应地对其进行版本化并标记它的最新标记,则您的CI(持续集成)或任何其他管道都应该有一个从零开始重建Docker映像的阶段。
此外,这链接有一种使用远程git存储库构建坞映像的好方法,如果您不想使用CI管道,这在您的场景中可能很有用。
https://stackoverflow.com/questions/55292964
复制相似问题