将读写卷安装在只读卷内部

时间:2019-10-14 19:54:19

标签: docker docker-volume

我有两卷:repocache。我想在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的“内部”,因为应用程序期望的位置(并且我无法修改该应用程序以在其他地方查看)。

1 个答案:

答案 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