如何映射使用Docker的卷path–volumes-from?

我是Docker的--volumes-from对使用--volumes-fromfunction感到很兴奋--volumes-from但有些事情我不是很了解。

如果我想使用--volumes-from与两个仅限数据的容器,每个容器导出名为/srv卷,如何防止卷path冲突? 使用[host-dir]:[container-dir]创build绑定挂载时,我可以映射卷名[host-dir]:[container-dir] ; 我怎么用--volumes-from做到这--volumes-from

所以我想要的是这样的:

 docker run --name=DATA1 --volume=/srv busybox true docker run --name=DATA2 --volume=/srv busybox true docker run -t -i -rm --volumes-from DATA1:/srv1 --volumes-from DATA2:/srv2 ubuntu bash 

它可以做到,但是在docker命令行界面中此时不支持。

如何

find卷目录:

 docker inspect DATA1 | grep "vfs/dir" # output something like: # "/srv": "/var/lib/docker/vfs/dir/<long vol id>" 

因此,您可以自动执行此操作,并将这些目录安装在您select的安装点上:

 # load directories in variables: SRV1=$(docker inspect DATA1 | grep "vfs/dir" | awk '/"(.*)"/ { gsub(/"/,"",$2); print $2 }') SRV2=$(docker inspect DATA2 | grep "vfs/dir" | awk '/"(.*)"/ { gsub(/"/,"",$2); print $2 }') 

现在,将这些卷装入真实目录而不是–volumes-from:

 docker run -t -i -v $SRV1:/srv1 -v $SRV2:/srv2 ubuntu bash 

国际海事组织,function是相同的,因为这是使用--volumes-from完成相同的事情。

为了完整性…

 #create data containers docker run --name=d1 -v /svr1 busybox sh -c 'touch /svr1/some_data' docker run --name=d2 -v /svr2 busybox sh -c 'touch /svr2/some_data' # all together... docker run --rm --volumes-from=d1 --volumes-from=d2 busybox sh -c 'find -name some_data' # prints: # ./svr2/some_data # ./svr1/some_data # cleanup... docker rm -f d1 d2 

“–volumes-from = container ”只是映射文件系统,就像mount --bind

如果你想改变路线,吉日的答案是(当前)唯一的方法。 但是,如果您处于有限的环境中,则可能需要使用内置检查parsingfunction的docker:

 # create data containers docker run --name=DATA1 --volume=/srv busybox sh -c 'touch /srv/some_data-1' docker run --name=DATA2 --volume=/srv busybox sh -c 'touch /srv/some_data-2' # run with volumes and show the data docker run \ -v $(docker inspect -f '{{ index .Volumes "/srv" }}' DATA1):/srv1 \ -v $(docker inspect -f '{{ index .Volumes "/srv" }}' DATA2):/srv2 \ --rm busybox sh -c 'find -name some_data-*' # prints: # ./srv2/some_data-2 # ./srv1/some_data-1 # ditch data containers... docker rm -f DATA1 DATA2 

这可能适用于boot2docker自带的旧bash版本。