首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Docker的空目录“已存在且不是空目录”

使用Docker的空目录“已存在且不是空目录”
EN

Stack Overflow用户
提问于 2019-03-22 04:32:12
回答 1查看 1.6K关注 0票数 1

我一直在做一个Docker映像,从github回购中提取必要的文件,然后构建自己。它只打算每次从github更新自己,但为了测试它,我每次运行github回购文件夹时都会删除整个github回购文件夹。

删除文件夹后,我开始

致命:目标路径‘Projec-4’已经存在,并且不是一个空目录。

Dockerfile (生成图像的文件)的内容如下:

代码语言:javascript
复制
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很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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管道,这在您的场景中可能很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55292964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档