在Docker中,如何将容器中的卷共享到主机?

时间:2016-02-22 18:44:33

标签: docker docker-compose

我知道您可以使用VOLUMES指令共享主机上存在的目录,但是我想反过来 - 与主机共享容器中存在的文件,前提是不存在任何内容在主机上的那个目录中。

这个用例就是我们有承包商,我们希望为他们提供一个docker容器,其中包含他们需要使用的所有代码和基础结构,但是这将允许他们通过运行来改变代码PyCharm或其他程序在他们的本地机器上,而不必担心提交容器,等等。

2 个答案:

答案 0 :(得分:2)

为了能够保存(持久化)数据,Docker提出了卷的概念。基本上Volumes是默认的Union File System之外的目录(或文件),并且作为主机文件系统上的普通目录和文件存在。

您可以使用-v标志在运行时声明卷:

$ docker run -it --name container1 -v /data debian /bin/bash

这将使容器内的目录/data在联合文件系统之外,并可在主机上直接访问。将/data目录中保存的图像的任何文件复制到卷中。我们可以通过在主机上使用docker inspect命令找出卷在主机上的位置。

打开一个新终端,让上一个容器继续运行并运行:

$ docker inspect container1

输出将提供有关容器配置(包括卷)的详细信息。 输出应类似于以下内容:

...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "//var/lib/docker/vfs/dir/cde167197ccc3e/_data",
        "Destination": "/data",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]
...

告诉我们Docker已将/data挂载到容器中,作为主机中/var/lib/docker下的某个目录。

答案 1 :(得分:0)

Dockerfile中,您可以轻松ADD or COPY整个目录。

我想这就是你要找的东西。否则,您只需共享代码即可docker run,以便他们可以批量安装共享代码。