我知道我可以使用类似于
docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash
是否有一种方法可以创建多个主机-容器对?例如,一个逗号分隔的列表,或传递在一个数组?
传递多个-v参数。
-v
例如:
docker -v /on/my/host/1:/on/the/container/1 \ -v /on/my/host/2:/on/the/container/2 \ ...
或者你可以
docker run -v /var/volume1 -v /var/volume2 DATA busybox true
卷可以设置为“只读”或“只读”
docker -v /on/my/host/1:/on/the/container/1:ro \ docker -v /on/my/host/2:/on/the/container/2:rw \
你可以在docker run命令中多次使用-v选项来挂载容器中的多个目录:
docker run
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
Docker现在建议迁移到使用--mount。
--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
原来的老答案应该仍然有效;只是想让答案与目前最知名的方法保持一致。
在Windows上:如果你必须挂载两个目录E:\data\dev &E: \ \ dev2数据
使用:
docker run -v E:\data\dev:c:/downloads -v E:\data\dev2 c:/downloads2 -i --publish 1111:80 -P SomeBuiltContainerName:SomeLabel
我看到一条评论问默认选项是读写还是只读;“读写”是默认选项。(因为我没有足够的代表来评论,所以发表了一篇文章)
根据码头工人的文档,运行以下命令:
docker run -d \ --name devtest \ --mount source=myvol2,target=/app \ nginx:latest
然后使用docker inspect devtest并定位"RW"选项中的“;Mounts"输出部分:
docker inspect devtest
"Mounts": [ { "Type": "volume", "Source": "/var/lib/docker/volumes/myvol2/_data", "Destination": "/app", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
让我们看看默认选项让卷既可读又可写。
要将卷设置为只读(同样是根据官方文档),在source和destination标记后添加readonly:
source
destination
readonly
docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \ nginx:latest
运行docker inspect nginxtest并找到"Mounts"
docker inspect nginxtest
"Mounts": [ { "Type": "volume", "Source": "/var/lib/docker/volumes/nginx-vol/_data", "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "", "RW": false, "Propagation": "" } ],
(注:我不知道为什么官方文档在target和destination标签之间交换,但我是在假设它们可以互换使用的前提下工作的。)
target
对于一个可运行的例子:
docker run -v /Users/brandomiranda/iit-term-synthesis:/home/bot/iit-term-synthesis \ -v /Users/brandomiranda/pycoq:/home/bot/pycoq \ -v /Users/brandomiranda/ultimate-utils:/home/bot/ultimate-utils \ -ti brandojazz/iit-term-synthesis:test bash
但首先要:
docker pull brandojazz/iit-term-synthesis:test