我想将主机数据卷挂载到docker。但容器应具有读写权限,同时,数据卷上的任何更改都不应影响主机中的数据。
我可以映像一个将多个数据卷挂载到单个文件夹的解决方案,一个是只读的另一个是读写。但只有这第二个' -v'在我的命令中工作,
docker run -ti --name build_cent1 -v /codebase/:/code:ro -v /temp:/code:rw centos6:1.0 bash
答案 0 :(得分:2)
通常情况下,在这种情况下,我认为你ADD
是Docker镜像的文件夹,因此运行它的任何容器都会将它放在其(可写)文件系统中,但写入将转到另一层。
您需要在要使用的文件夹上方的文件夹中写一个Dockerfile
,该文件夹应如下所示:
FROM my/image
ADD codebase /codebase
然后使用docker build -t some-name <path>
构建容器。这些步骤可以添加到您的应用程序的构建脚本中(也许您会找到一些插件来帮助那里)。然后你可以docker run some-name
。
缺点是有一个副本要做和创建图像,但是如果你启动许多容器,它们将以只读方式共享该层的相同副本,并将它们自己的修改写入上面的独立层。
答案 1 :(得分:1)
只有这第二个&#39;
-v
&#39;在我的命令中工作,
这可能是因为两个-v
选项都试图在相同的容器目标文件夹/code
上挂载主机文件夹。
-v /codebase/:/code:ro
^^^^^
-v /temp:/code:rw
^^^^^
您可以将这些主机文件夹安装在/code
内的两个单独的文件夹中
如:
-v /codebase/:/code/base:ro -v /temp:/code/temp:rw.