gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:24:24 25 4
gpt4 key购买 nike

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

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

工作流程是:

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

    您可以从容器内部重新安装您的卷,在 rw模式,像这样:

    mount -o remount,rw /mnt/data

    问题是默认情况下 Docker 容器内不允许挂载系统调用,因此您必须在特权模式下运行它:
    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可能很棘手,因为某些进程可能已经打开其中的一些文件进行写入,在这种情况下 remount将失败 is busy错误信息。

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

    关于docker - 是否可以在运行时更改 docker mount 的只读/读写状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118003/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com