docker 无法创建挂载路径并且总是失败

时间:2021-06-24 11:58:41

标签: docker docker-compose

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

2 个答案:

答案 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 的程度。