在 docker 容器上安装多个卷?

Posted

技术标签:

【中文标题】在 docker 容器上安装多个卷?【英文标题】:Mounting multiple volumes on a docker container? 【发布时间】:2013-09-18 00:04:21 【问题描述】:

我知道我可以在我的容器上使用类似的东西在我的主机上挂载一个目录

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

有没有办法创建多个主机-容器对?例如一个逗号分隔的列表,还是传入一个数组?

【问题讨论】:

据我了解文档术语的当前状态,您不能安装卷(问题标题),您当然可以有许多绑定安装到主机文件夹(这是问题正文中要求的) 【参考方案1】:

传递多个-v 参数。

例如:

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

【讨论】:

好的,所以我以完全相同的方式执行此操作,但是当我尝试调用第二个时,它说找不到。 docker run -v /home/usr/workspace/proj/WebContent/file/username:/mycode -v /home/usr/workspace/proj/WebContent/file:/tst gcc:4.9 sh -c 'cd 我的代码; gcc -o myapp ./mycode.c;光盘测试; ./myapp 它总是需要绝对路径吗? 目的地必须始终是绝对的。源需要是绝对路径或命名卷的标识符 - 有关后者的文档,请参阅 docs.docker.com/engine/admin/volumes/volumes。 这仅适用于我正在映射的第二个卷...假设我不能使用 docker file only 运行命令,我如何在同一个运行命令中映射两个卷【参考方案2】:

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 都很好,这取决于您的个人喜好和需求。【参考方案3】:

您可以在docker run 命令中多次使用-v 选项来挂载容器中的多个目录:

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

【讨论】:

这会给the preceding answer to the same effect添加什么吗?【参考方案4】:

您可以在卷上设置只读或只读和只写

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

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

【讨论】:

哪个是默认选项?【参考方案5】:

在 Windows 上:如果必须挂载两个目录 E:\data\dev & E:\data\dev2

用途:

docker run -v E:\data\dev:c:/downloads -v E:\data\dev2 c:/downloads2 -i --publish 1111:80 -P SomeBuiltContainerName:SomeLabel

【讨论】:

【参考方案6】:

或者你可以这样做

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

【讨论】:

这不是 OP 所追求的。这会在容器内创建一个卷,并且不会将其绑定到主机上。 你说得对,应该是:docker run -v /var/volume1:/container/volume1 -v /var/volume2:/container/volume2 DATA busybox true

以上是关于在 docker 容器上安装多个卷?的主要内容,如果未能解决你的问题,请参考以下文章

Docker Compose - 在多个容器之间共享命名卷

将 docker 卷安装到 docker 容器

Linux下部署docker记录-Volume使用

06-Docker-容器数据卷

Docker 容器数据卷(挂载)

docker存储卷