Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在运行时更改docker装载的只读/读写状态?_Docker - Fatal编程技术网

是否可以在运行时更改docker装载的只读/读写状态?

是否可以在运行时更改docker装载的只读/读写状态?,docker,Docker,我有一个停靠的应用程序,它使用文件系统存储大量状态。应用程序代码包含在docker映像中 我正在考虑一种更新策略,它涉及在两个容器之间共享卷,但要确保一次最多有一个容器可以写入该文件系统 工作流程将是: 使用数据装载rw启动容器A 在容器B中启动/data-mounted-ro和更新版本的应用程序 停止向容器A提供请求 对于容器A,将/data挂载设置为只读 对于容器B,使/数据装载为读写 开始向容器B提供请求 您可以在rw模式下从容器内部重新装入卷,如下所示: mount -o remoun

我有一个停靠的应用程序,它使用文件系统存储大量状态。应用程序代码包含在docker映像中

我正在考虑一种更新策略,它涉及在两个容器之间共享卷,但要确保一次最多有一个容器可以写入该文件系统

工作流程将是:

  • 使用数据装载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