是否有可能在运行时更改docker mount的只读/读写状态?
我有一个dockerized应用程序,使用文件系统来存储大量的状态。 应用程序代码包含在Docker镜像中
我正在考虑一个更新策略,它涉及在两个容器之间共享容量,但要确保一次最多只有一个容器可以写入该文件系统。
工作stream程将是:
- 启动容器A,并将数据安装到rw
- 启动容器B,并挂载/数据ro,以及更新版本的应用程序
- 停止向容器A提供请求
- 对于容器A,使/ data mount只读
- 对于容器B,使/ data mount可读写
- 开始向容器B提供服务请求
您可以在rw
模式下从容器内部重新安装卷,如下所示:
mount -o remount,rw /mnt/data
问题在于默认情况下Docker容器内部不允许装入系统调用,因此您必须以特权模式运行它:
docker run --privileged ...
或启用SYS_ADMINfunction
SYS_ADMIN执行一系列系统pipe理操作。
docker run --cap-add=SYS_ADMIN --security-opt apparmor:unconfined
(注意,我还必须添加–security-opt apparmor:unconfined,才能在Ubuntu上运行)。
另外,将rw
卷重新挂载回ro
可能会非常棘手,因为某些进程可能已经在其中打开了一些文件进行写入,在这种情况下, remount
将会失败并显示错误消息。
但我的猜测是,你可以重新启动容器,而不是运行旧版本的应用程序。
- Selenium WebDriver为Click操作抛出一个错误,但Click实际上是成功的
- Docker:能够从主机远程login远程机器,但不能从容器远程login
- 使用docker-java从Amazon ECR中提取图像
- Docker:从主机使用–net = host选项访问docker容器中的mysql
- docker-compose不启动postgres图像
- 在Docker中设置cassandra驱动程序(python)
- AWT错误,同时试图build立Jenkins基于高山的Docker图像 –
- 正确的语法做mongoDb docker实例的mongodump?
- 使用Docker exec运行java命令会失败,并显示“no such file or directory”