我有两卷:repo
和cache
。我想在repo
上以只读方式挂载/repo
,并且想在cache
上以读写方式挂载/repo/cache
。当应用程序写入/repo/cache
时,我希望写入的内容将进入cache
卷,而/repo
卷未更改;但是,当我运行docker run -it -v repo:/repo:ro -v cache:/repo/cache alpine
时,我得到docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/var/lib/docker/volumes/cache/_data\\\" to rootfs \\\"/var/lib/docker/overlay2/9f1dfff7f943921fd2da278d357bec88007d7fcb41eb9bc34fc0e728c459ad73/merged\\\" at \\\"/var/lib/docker/overlay2/9f1dfff7f943921fd2da278d357bec88007d7fcb41eb9bc34fc0e728c459ad73/merged/repo/cache\\\" caused \\\"mkdir /var/lib/docker/overlay2/9f1dfff7f943921fd2da278d357bec88007d7fcb41eb9bc34fc0e728c459ad73/merged/repo/cache: read-only file system\\\"\"": unknown.
是否有更好的方法来实现此结果?我需要将repo
卷设置为ro
,这样应用程序才能不对其进行写操作,并且我需要cache
可写并安装在/repo
的“内部”,因为应用程序期望的位置(并且我无法修改该应用程序以在其他地方查看)。
答案 0 :(得分:0)
要将cache
卷安装在/repo/cache
上,Docker必须能够在容器内创建目录/repo/cache
。由于您已经以只读方式挂载了repo
卷,所以这是不可能的。
如果您首先自己创建挂载点:
docker run --rm -v repo:/repo alpine mkdir /repo/cache
然后,尽管/repo/cache
是只读的,您仍可以成功挂载repo
:
bash-5.0$ docker run --rm -it -v repo:/repo:ro -v cache:/repo/cache alpine
/ # ls /repo
cache