在Docker容器上挂载多个卷?


152

我知道我可以使用类似的方法在容器的主机上挂载目录

docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash

有没有一种方法可以创建多个主机/容器对?例如用逗号分隔的列表,或者传入数组?


据我了解文档术语的当前状态,您不能挂载卷(问题标题),当然可以对主机文件夹进行许多绑定挂载(这是问题正文所要求的)
Alexei Martianov,

Answers:


260

传递多个-v参数。

例如:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...

2
好的,所以我这样做的方式完全相同,但是当我尝试致电第二个电话时,它说找不到。
2015年

docker运行-v / home / usr / workspace / proj / WebContent / file / username:/ mycode -v / home / usr / workspace / proj / WebContent / file:/ tst gcc:4.9 sh -c'cd mycode; gcc -o myapp ./mycode.c; cd tst; “。我该怎么做?
2015年

1
@YehCheez,我(强烈)建议将其作为一个单独的问题打开,并尝试构建一个生殖器。(如果您可以在公共注册表中使用Docker映像来重现该错误,并在问题中给出的脚本中创建所有本地依赖项,那将是理想的选择)。
Charles Duffy 2015年

是否总是需要绝对路径?
xatzistnr

3
目的地必须始终是绝对的。源必须是绝对路径或命名卷的标识符- 有关后者的文档,请参阅docs.docker.com/engine/admin/volumes/volumes
Charles Duffy

19

Docker现在建议向使用迁移--mount

当前Docker文档中还详细说明了多个卷安装。

来自:https : //docs.docker.com/storage/bind-mounts/

$ docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest

原来的旧答案应该仍然有效;只是试图使答案与当前最知名的方法保持一致。


值得添加Docker建议迁移的唯一原因是,因为他们的研究表明--mount易于使用,并且具有更多选择。使用-v或--mount完全可以,这取决于您的个人喜好和需求。
KillerKode19年


6

您可以在该卷上具有“只读”或“仅读写”功能

docker -v /on/my/host/1:/on/the/container/1:ro \

docker -v /on/my/host/2:/on/the/container/2:rw \

1
默认选项是哪一个?
哈马德·达尔

-9

或者你可以做

docker run -v /var/volume1 -v /var/volume2 DATA busybox true

4
这不是OP所追求的。这会在容器内创建一个卷,并且不会在主机上绑定它。
Ioannis

8
您说得对,应该是:docker run -v / var / volume1:/ container / volume1 -v / var / volume2:/ container / volume2 DATA busybox true
Joost van der Laan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.