Docker安装卷以反映主机中的容器文件

时间:2019-02-26 20:57:54

标签: docker

用例是我要下载包含python代码文件的图像。假定该图像没有安装任何文本编辑器。因此,我想在主机上安装驱动器,以便容器中的文件显示在此主机安装中,并且我可以使用主机上安装的其他编辑器来更新代码。保存更改将反映在图像中。

如果我运行以下>

docker run -v /host/empty/dir:/container/folder/with/code/files -it myimage

/ host / empty / dir 仍然为空,浏览容器dir也将其显示为空。我想要的是 / container / folder / with / code / files 的文件内容,显示在 / host / empty / dir

2 个答案:

答案 0 :(得分:0)

您的/host/empty/dir始终为空,因为卷绑定将空文件夹替换(覆盖)了容器文件夹。但是您不能做相反的事情,也就是说,您需要使用一个容器文件夹来替换您的主机文件夹。

但是,有一种解决方法,方法是将文件从容器文件夹手动复制到主机文件夹。在按照您的建议使用它们之前。

例如:

  1. 运行docker映像,并在主机文件夹和临时文件夹之间进行卷映射:docker run -v /host/empty/dir:/some-temp-folder -it myimage
  2. 将您的/container/folder/with/code/files内容复制到/some-temp-folder中,用容器文件夹填充主机文件夹
  3. /host/empty/dir上运行具有体积映射的容器,但是现在此文件夹不再为空:run -v /host/empty/dir:/container/folder/with/code/files -it myimage

请注意,步骤1和2可以替换为Copying files from Docker container to host

答案 1 :(得分:0)

塞巴斯蒂安·赫尔伯特(SébastienHelbert)的回答是正确的。但是仍然有一种方法可以分两个步骤进行。

首先运行容器以提取文件:

docker run --rm -it myimage

在另一个终端中,键入此命令以从容器中复制所需内容。

docker cp <container_id>:/container/folder/with/code/files /host/empty/dir

现在停止容器。停止时将删除(--rm)。 现在,如果您运行原始命令,它将按预期运行。

docker run -v /host/empty/dir:/container/folder/with/code/files -it myimage

还有另一种无需复制即可从容器内访问文件的方法,但这很麻烦。