在docker中挂载两个嵌套的只读挂载点

zmb*_*mbq 6 mount readonly docker

我有一个docker-compose文件运行 PHP 并以嵌套方式安装一些卷。它已经工作了两年了。最近我又尝试了一次,但失败了,至少在 Docker for WSL 2 上是这样。以下是 docker-compose 文件中挂载的卷。

volumes:
   - ../src:/var/www/html:ro
   - ./userData:/var/www/html/userData:ro
Run Code Online (Sandbox Code Playgroud)

请注意,第二个卷安装在第一个卷内。

Docker 无法挂载第二个目录,声称它无法更新只读文件系统。我可以从第一个安装中删除:ro,它可以工作,但是 - 我确实希望两个安装都是只读的,并且我想保持外部文件系统(带有srcuserData)不变。

我怎样才能让这种安装行为再次发挥作用?

Dan*_*nik 2

你不能做到。嵌套堆需要在文件系统上创建目录。

所以你的解决方案是:

  • 禁用只读 - ../src:/var/www/html:ro
  • 创建链接ln -s ./userData ../src/userData
  • 不要使用嵌套安装,这是一个不好的做法。所以你的容器需要重新设计。

参考文献:https://github.com/moby/moby/issues/26051

  • 您是否能够量化为什么嵌套安装是不好的做法,或者提供任何关于这种效果的参考?嵌套绑定挂载在 Linux 中是正常的并且绝对没问题。我很难弄清楚为什么 docker 会有所不同。 (3认同)