您可以将文件从Docker容器复制到本地主机吗?

时间:2020-06-08 19:06:14

标签: docker

我对Docker非常不满意,因此尝试查看这种情况是否可行,以及如何实现。

我们在一个文件夹中有两个json文件,在另一个文件夹中有另一个文件,这是本地开发所需的。我们并不是真的想将这些添加到我们的仓库中,但是如果没有这样做,我们每次在该项目上工作时都必须不断地手动将它们重新添加(复制/粘贴到其中)。因此,我认为Docker可能是解决此问题的好方法。

我的计划是将这些文件保存在自己和其他开发人员可以使用的docker映像中。然后,当他们从该映像创建并运行容器时,Dockerfile会将这些文件复制到映像中,并将它们添加到需要移动的位置,然后在容器停止时消失。

到目前为止,我相信我的图像中有文件。我将它们添加到我的容器中,然后提交给我的图像。我现在遇到的问题是如何使用它们。

所以我想知道是否可以在图像中使用这些文件,以便容器将它们复制到本地正确的位置,然后在容器停止时将其删除,因此我们不需要这些文件完全在本地,它们完全包含在docker容器中吗?从本质上讲,如果我们可以将文件从容器复制到本地主机,并且可以,那么在容器停止时它们会消失吗?

1 个答案:

答案 0 :(得分:1)

Docker镜像不是分发数据文件的好方法。

从设计的角度来看,Docker容器是单个进程的包装,并且映像包含运行该进程所需的代码及其所有OS级依赖关系。容器在与主机隔离的文件系统中运行,您需要使用特殊选项来授予对主机文件系统的访问权限。由于您可以使用它来以根级权限访问主机文件系统的任何部分,因此您通常需要管理员级权限才能完全运行容器。

理论上这是可能的,但是要真正运行它,您需要像这样的调用

sudo docker run --rm -v $PWD:/host our-org/file-copier

您还仍然需要在某处提交映像的源代码,包括其中嵌入的所有文件,并且设置自动化机制以重建它是一个好习惯。 (您几乎应该永远不要使用docker commit。)这比单个JSON文件所需的设置更多。

一些更合理的方法将包括仅开发工件的存储库,或者具有一些包含这些文件的集中式服务器。 (如果您不在AWS上,则S3存储桶非常适合此需求。)

scp dev-server:development.json .
aws s3 cp s3://my-org-dev-files/development.json .