在Docker中,我如何将一个容器从容器共享给主机?

我知道你可以使用VOLUMES指令共享一个存在于主机上的目录,但是我想做相反的事情 – 在主机中共享容器中存在的文件,只要该目录中不存在任何东西在主机上。

用例就是我们有承包商,我们想给他们提供一个docker容器,它包含了所有需要使用的代码和基础设施,但是这将允许他们通过运行PyCharm或者一些其他程序在本地机器上,而不必担心提交容器,等等。

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

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

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

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

打开一个新的terminal并保持以前的容器运行并运行:

 $ docker inspect container1 

输出将提供容器configuration的详细信息,包括容量。 输出应该看起来类似于以下内容:

 ... 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下的某个目录中。

在您的Dockerfile中,您可以轻松地ADDCOPY整个目录。

我想这就是你要找的。 否则,你可以分享代码,并在docker run以便他们可以批量安装共享代码。