【问题标题】:Docker sets wrong owner for MongoDB mounted volumeDocker 为 MongoDB 挂载卷设置了错误的所有者
【发布时间】:2020-03-25 20:29:47
【问题描述】:

我有一个使用 Docker(docker-compose) 和 MongoDB 的简单 NodeJs 应用程序。一切正常,但 Mongo 的挂载卷是在用户 999 的所有权下创建的。

Docker是在非root用户权限下执行的。

这里是挂载的卷权限信息:

drwxr-sr-x   4      999 www-data 4,0K Aug  5 21:56 mongo-data

这是我的 docker-compose.yml 文件:

version: "3.3"
services:
    api:
       .....
    mongodb:
        image: mongo:latest
        container_name: "mongodb"
        environment:
            - MONGO_DATA_DIR=/data/db
            - MONGO_LOG_DIR=/dev/null
        volumes:
            - ./mongo-data:/data/db
        ports:
            - 27017:27017
        command: mongod --smallfiles --logpath=/dev/null
volumes:
    mongo-data:

下次执行时:docker-compose up -d --build会抛出这个错误:

错误:无法在 http+docker://localunixsocket 连接到 Docker 守护程序 - 它正在运行吗?

如果挂载的卷的所有权发生了变化,一切都会恢复正常,直到下一次。

我提到我之前在 MySQL 和 Redis 中使用过这种配置,但我从未遇到过这个问题。

关于如何解决它的任何想法?

谢谢!

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    在上一个答案的基础上,为避免将来出现此类问题,您可以考虑使用托管卷而不是文件系统中的特定目录。让所有这些奇怪的文件看不见,并避免像这样的奇怪的权限问题。这是我为 Mongo 设置的 Docker Compose:

    https://github.com/alexmacarthur/local-docker-db/blob/master/mongo/docker-compose.yml#L6

    【讨论】:

      【解决方案2】:

      在基于 Ubuntu 的映像上,999 将是第一个可能为未知用户分配 UID 的系统,后续 ID 会倒计时。

      这可能意味着您要挂载的目录可能是网络路径,也可能是从另一台机器复制的,这两种情况都会导致用户在您的机器上不为人知,从而导致系统分配了 UID。

      请注意,您可以使用 ADD --chown X:Y 语法在具有已定义用户 ID 的用户下添加文件。

      【讨论】:

        【解决方案3】:

        这也会在主机上管理这些文件时产生问题,例如以非特权用户身份备份这些文件,这可能是开发人员 PC 上想要的。

        这是实际的解决方案

        你可以:

        docker run --user some-other-user-id:some-group-id
        

        或者,在 docker-compose 中,这是一个最小的示例:

        version: '3.5'
        
        services:
          mongo:
            image: mongo:latest
            user: '1000:1000'
            volumes:
              - ./data:/data/db
        

        运行此程序后,查看数据目录,它仅包含 1000 个用户/组。当然,将其设置为您认为合适的任何值。

        我发现有必要先在指定的用户下创建目录。如果我没记错的话,docker-compose 以 root 身份运行,并且该目录归 root 所有,这会造成混乱。

        所以,

        mkdir data
        docker-compose up
        

        享受吧!

        【讨论】:

          猜你喜欢
          • 2019-08-04
          • 2018-08-18
          • 2020-01-20
          • 2013-09-27
          • 1970-01-01
          • 1970-01-01
          • 2016-12-15
          • 2018-05-31
          相关资源
          最近更新 更多