【问题标题】:docker unable to create mount path and fails alwaysdocker 无法创建挂载路径并且总是失败
【发布时间】:2021-06-24 11:58:41
【问题描述】:

docker 无法创建挂载路径 /foo/logs,该路径在我的 docker-compose 文件中的所有容器之间共享。此错误偶尔会发生,不确定是什么原因造成的。我们现在必须在最新版本的 docker-compose 上重新启动 docker 或机器来解决这个问题

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

【问题讨论】:

  • 使用卷而不是 fs 挂载
  • 不是上面的卷,因为它在 /foo/logs 下声明
  • 我添加了更多关于其他服务如何假脱机日志的信息
  • 对不起,我不清楚。使用 docker 卷而不是 fs 挂载。您有一个文件系统 (fs) 挂载。在所有情况下,最好使用 docker 卷。
  • 我认为这与 /foo/logs 作为源(左侧)的绑定无关,因为当 docker 尝试在容器中创建目录时会出现错误。您是否也在某处使用 /foo/logs 作为目标(右侧)?

标签: docker docker-compose


【解决方案1】:

/foo/logs 文件系统似乎以只读方式挂载。 使用mount | grep "/foo/logs" 检查/foo/logs 的选项并在需要时重新挂载 - 类似于mount -o remount,rw /foo/logs(我假设/foo/logs 不在您的根文件系统下)。

此外,多个容器之间的绑定挂载可能会导致问题。文件的所有权可能会变得混乱 - 请改用卷。

【讨论】:

  • 它不是单独的挂载,而是根文件系统的一部分,因此无法使用您的建议
【解决方案2】:

Docker 正在尝试创建一个目录,然后将其挂载到容器中。

如果您尝试自己创建目录,即mkdir /foo/logs,您会收到类似的错误。

这与 Docker 无关,问题在于您对该特定路径的权限。

通过将所有源路径(: 之前的部分)更改为您具有写入权限的目录,例如 /tmp/foo,将问题与 Docker 隔离开来。

注意问题不是/foo/logs 而是/foo,因为消息说它不能在只读系统中创建/foo;它甚至没有达到在/foo 中创建logs 的地步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多