我有一个dockerized应用程序,它使用文件系统来存储大量状态。应用程序代码包含在docker镜像
中我正在考虑更新策略,该策略涉及在两个容器之间共享卷,但确保一次最多一个容器可以写入该文件系统。
工作流程将是:
答案 0 :(得分:3)
您可以在rw
模式下从容器内重新装入卷,如下所示:
mount -o remount,rw /mnt/data
问题是默认情况下不允许在Docker容器中挂载syscall,因此您必须以特权模式运行它:
docker run --privileged ...
或启用SYS_ADMIN功能
SYS_ADMIN执行一系列系统管理操作。
docker run --cap-add=SYS_ADMIN --security-opt apparmor:unconfined
(请注意,我还必须添加--security-opt apparmor:unconfined,以便在Ubuntu上运行)。
此外,将rw
卷重新安装回ro
可能会非常棘手,因为某些进程可能已经在其中打开了一些文件进行写入,在这种情况下remount
将失败并显示is busy
错误消息。
但我的猜测是你可以重新启动容器(因为它将运行旧版本的应用程序)。