是否可以在运行时更改docker装载的只读/读写状态?
我有一个停靠的应用程序,它使用文件系统存储大量状态。应用程序代码包含在docker映像中 我正在考虑一种更新策略,它涉及在两个容器之间共享卷,但要确保一次最多有一个容器可以写入该文件系统 工作流程将是:是否可以在运行时更改docker装载的只读/读写状态?,docker,Docker,我有一个停靠的应用程序,它使用文件系统存储大量状态。应用程序代码包含在docker映像中 我正在考虑一种更新策略,它涉及在两个容器之间共享卷,但要确保一次最多有一个容器可以写入该文件系统 工作流程将是: 使用数据装载rw启动容器A 在容器B中启动/data-mounted-ro和更新版本的应用程序 停止向容器A提供请求 对于容器A,将/data挂载设置为只读 对于容器B,使/数据装载为读写 开始向容器B提供请求 您可以在rw模式下从容器内部重新装入卷,如下所示: mount -o remoun
- 使用数据装载rw启动容器A
- 在容器B中启动/data-mounted-ro和更新版本的应用程序
- 停止向容器A提供请求
- 对于容器A,将/data挂载设置为只读
- 对于容器B,使/数据装载为读写
- 开始向容器B提供请求
rw
模式下从容器内部重新装入卷,如下所示:
mount -o remount,rw /mnt/data
问题是默认情况下Docker容器中不允许装载syscall,因此您必须以特权模式运行它:
docker run --privileged ...
或者启用该功能
系统管理员执行一系列系统管理操作
(请注意,我还必须添加--security opt apparmor:unconfined,以便在Ubuntu上工作)
此外,将rw
卷重新装载回ro
可能很棘手,因为某些进程可能已经打开了其中的一些文件进行写入,在这种情况下,重新装载
将失败,并显示正忙
错误消息
但我的猜测是,您可以重新启动容器(因为它将运行旧版本的应用程序)。谢谢您的回答。事实上,映射rw→ ro很可能不起作用。我已经使用-docker run-v/var/www/html/docker volume/:/docker volume/:ro-p 8080:80-名称测试b05752a629b5创建了一个容器。您能帮我将其设置为rw吗?我不知道如何使用您编写的命令。
docker run --cap-add=SYS_ADMIN --security-opt apparmor:unconfined