与主机中的容器共享目录或卷
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>
。这是后者的前任:
- 用
-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!
- 从主机 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": {} }
- 使用共享卷启动另一个容器并检查共享 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!
- 转到步骤 3 与新容器共享卷。
我有一个目录(可能是以后的卷),我想与我所有的交互式容器共享。我知道,本机 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>
。这是后者的前任:
- 用
-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!
- 从主机 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": {} }
- 使用共享卷启动另一个容器并检查共享 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!
- 转到步骤 3 与新容器共享卷。