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

前端之家收集整理的这篇文章主要介绍了是否可以在运行时更改Docker挂载的只读/读写状态? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个使用文件系统存储大量状态的码头化应用程序.应用程序代码包含在docker映像中

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

工作流程为:

>使用/ data挂载rw启动容器A
>使用/ data挂载ro和应用程序的较新版本启动容器B
>停止向容器A提供请求
>对于容器A,将/ data挂载设为只读
>对于容器B,使/ data安装为可读写
>开始向容器B提供请求

最佳答案
您可以在rw模式下从容器内部重新安装卷,如下所示:

mount -o remount,rw /mnt/data

问题是,默认情况下,在Docker容器内不允许mount syscall,因此您必须在特权模式下运行它:

docker run --privileged ...

或启用SYS_ADMIN功能

SYS_ADMIN Perform a range of system administration operations.

docker run --cap-add=SYS_ADMIN --security-opt apparmor:unconfined

(请注意,我还必须添加–security-opt apparmor:unconfined才能在Ubuntu上实现此功能).

另外,将rw卷重新安装到ro可能很棘手,因为某些进程可能已经打开了其中的一些文件进行写入,在这种情况下,重新加载将失败,并显示繁忙错误消息.

但是我的猜测是,您可以改为重新启动容器(因为它将运行旧版本的应用程序).

原文链接:https://www.f2er.com/docker/532714.html

猜你在找的Docker相关文章