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