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

问题描述

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

volumes:
   - ../src:/var/www/html:ro
   - ./userData:/var/www/html/userData:ro

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

Docker 无法挂载第二个目录,声称它无法更新只读文件系统。我可以从第一个安装中删除 :ro 并且它可以工作,但是 - 我确实希望两个安装都是只读的,并且我想保留外部文件系统(使用 src 和 { {1}}) 原样。

我怎样才能让这种挂载行为再次起作用?

解决方法

你不能这样做。嵌套的土墩需要在您的文件系统上创建目录。

所以您的解决方案是:

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

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