docker 无法创建挂载路径 /foo/logs,该路径在我的 docker-compose 文件中的所有容器之间共享。此错误偶尔会发生,不确定是什么原因造成的。我们现在必须重新启动 docker 或机器才能在最新版本的 docker-compose 上解决这个问题
volumes:
- /foo/logs:/app/service/logs
docker-compose -f docker-compose.yaml --env-file=.env.qa up -d
Starting foo-service-container ... error
ERROR: for foo-service-container Cannot start service foo-service: error while creating mount source path '/foo/logs': mkdir /foo: read-only file system
ERROR: for foo-service Cannot start service foo-service: error while creating mount source path '/foo/logs': mkdir /foo: read-only file system
各种容器具有如下各自的卷设置,因此所有容器日志都被假脱机到机器中的单个位置。不知道如何使这个健壮
- /foo/logs:/app/foo-service/logs
- /foo/logs:/app/foo-service1/logs
- /foo/logs:/app/foo-service2/logs
- /foo/logs:/app/foo-service3/logs
- /foo/logs:/app/foo-service4/logs
答案 0 :(得分:0)
似乎 /foo/logs
文件系统被挂载为只读。
使用 mount | grep "/foo/logs"
检查 /foo/logs
的选项并在需要时重新安装 - 类似于 mount -o remount,rw /foo/logs
(我假设 /foo/logs
不在您的根文件系统下)。
此外,多个容器之间的绑定挂载可能会导致问题。文件的所有权可能会变得混乱 - 请改用卷。
答案 1 :(得分:0)
Docker 正在尝试创建一个目录,然后将其挂载到容器中。
如果您尝试自己创建目录,即 mkdir /foo/logs
,您会得到类似的错误。
这与 Docker 无关,问题在于您对该特定路径的权限。
通过将所有源路径(:
之前的部分)更改为您具有写入权限的目录(例如 /tmp/foo
),将问题与 Docker 隔离。
请注意,问题不在于 /foo/logs
,而是 /foo
,因为消息说它无法在只读系统中创建 /foo
;它甚至没有达到在 logs
内创建 /foo
的程度。