与主机中的容器共享目录或卷

Share directory or volume with container from host

我有一个目录(可能是以后的卷),我想与我所有的交互式容器共享。我知道,本机 Docker 卷存储在 /var/lib/docker/volumes 下,docker run -v 似乎是最简单的方法,但我认为 Data Volume Container 是一种更加标准化的方法。我不知道如何从目录或现有的另一个卷创建此卷容器。可能是方法不对?

通过编写专用的 Dockerfile 创建一个数据卷容器,您可以在其中:

  • COPY你的文件夹在里面
  • 声明将本地容器路径文件夹复制为 VOLUME

然后 docker create <imagename> 你会得到一个(创建的)容器,你 can mount in all your other containers,为你 运行 他们提供 --volumes-from <containername> 选项。

创建和共享卷有两种方法: 1. 在Dockerfile上使用VOLUME指令。 2 在容器运行时指定 -v <volume_name> 选项,然后对需要共享数据的每个后续容器使用 --volumes-from=<container>。这是后者的前任:

  1. -v启动你的第一个容器,然后在共享卷的目录下添加一个测试文件。
docker run -it -v /test-volume --name=testimage1 ubuntu:14.04 /bin/bash

root@ca30f0f99401:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test-volume ===> test-volume dir got created here

root@ca30f0f99401:/# touch test-volume/1

root@ca30f0f99401:/# cat > test-volume/1     
Test Message!
  1. 从主机 OS,您可以通过检查您的容器来获取卷的详细信息:

docker inspect ca30f0f99401 | grep -i --color -E '^|Vol'

"Mounts": 
        {
            "Name": "025835b8b47d282ec5f27c53b3165aee83ecdb626dc36b3b18b2e128595d9134",
            "Source": "/var/lib/docker/volumes/025835b8b47d282ec5f27c53b3165aee83ecdb626dc36b3b18b2e128595d9134/_data",
            "Destination": "/test-volume",
            "Driver": "local",
            "Mode": "",
            "RW": true 

"Image": "ubuntu:14.04",
    "Volumes": {
        "/test-volume": {} }
  1. 使用共享卷启动另一个容器并检查共享 folder/files 是否存在。
$ docker run -it --name=testimage2 --volumes-from=testimage1 ubuntu:14.04 /bin/bash

root@60ff1dcebc44:/# ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test-volume  tmp  usr  var

root@60ff1dcebc44:/# cat test-volume/1
Test Message!
  1. 转到步骤 3 与新容器共享卷。