Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker时访问数据库时MongoDb身份验证失败?_Mongodb_Docker_Docker Compose - Fatal编程技术网

使用docker时访问数据库时MongoDb身份验证失败?

使用docker时访问数据库时MongoDb身份验证失败?,mongodb,docker,docker-compose,Mongodb,Docker,Docker Compose,我一直在尝试设置mongodb的密码 我的docker撰写文件是 version: "3" services: mongo: image: mongo ports: - "27016:27017" volumes: - ./data:/data/db environment: - MONGO_INITDB_ROOT_USERNAME=root

我一直在尝试设置mongodb的密码

我的docker撰写文件是

version: "3"
services:
    mongo:
        image: mongo
        ports:
            - "27016:27017"
        volumes:
            - ./data:/data/db
        environment:
            - MONGO_INITDB_ROOT_USERNAME=root
            - MONGO_INITDB_ROOT_PASSWORD=password
            - MONG_INITDB_DATABASE=example
现在在运行docker容器之后,当我尝试 进入容器后

连接成功,

MongoDB外壳版本4.2.7 连接到:mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb 隐式会话:会话{id:UUID71ec853d-3a05-4367-aa9f-d0a69217fb7d} MongoDB服务器版本:4.2.7 服务器有启动警告: 2020-06-16T17:43:51.837+0000 I存储[initandlisten] 2020-06-16T17:43:51.837+0000 I存储[initandlisten]**警告:强烈建议在WiredTiger存储引擎中使用XFS文件系统 2020-06-16T17:43:51.837+0000 I存储[initandlisten]**参见

但是当我尝试的时候

mongo mongodb://root:password@localhost:27017/example
身份验证失败。 MongoDB外壳版本4.2.7 连接到:mongodb://localhost:27017/example?compressors=disabled&gssapiServiceName=mongodb 2020-06-16T17:51:08.226+0000电子查询[js]错误:身份验证失败: connect@src/mongo/shell/mongo.js:341:17

当我尝试使用节点应用程序从外部访问时也是如此。 也在使用docker compose运行节点应用程序


蒙戈mongodb://root:password@mongo:27017/示例

您应该尝试连接到mongodb://root:password@localhost:27016/将docker容器的27017端口映射到主机的27016端口时,容器外部的示例。

需要注意两件事:

MONG_INITDB_数据库不会创建数据库,除非它位于数据卷绑定中,即./data:/data/DB。如果存在,则需要使用用于在数据下创建的特定角色 如果不是1,则需要提供一个文件,该文件将在/docker entrypoint initdb.d/*.js下创建数据库。以下是一个模板:

db.createUser(
    {
        user: "<user for database which shall be created>",
        pwd: "<password of user>",
        roles: [
            {
                role: "readWrite",
                db: "<database to create>"
            }
        ]
    }
)


你可以向他们的官方网站查询更多信息。章节:MONGO_INITDB_数据库和初始化一个新实例

不确定为什么没有在任何博客或教程中提及,但根据官方文档,

因此,最终有效的方法是添加authSource,在没有authSource的情况下,mongod在添加authSource后尝试在/example db中查找cred,从而给出错误

mongodb://root:password@localhost:27016/example?authSource=admin

这起作用并成功地将数据添加到示例数据库中

您似乎正在主机系统上运行另一个mongod进程,请将端口27016用于容器1。当我访问容器内部时,其仍在默认27017上运行,当我访问节点应用程序外部时,我使用docker compose,因此DNS将mongo映射到容器IP,因此仍然是27017。我将它映射到27016外部,因为我在27017上运行了一个本地实例。对于任何有问题的人,请查看mongo时它连接的相同内容mongodb://root:password@localhost:27016,但在mongo时失败mongodb://root:password@localhost:27016/example不确定,但声明/defaultdb是检查身份验证详细信息的数据库,所以,当我尝试附加/admin时,它工作了,但我想指定新的dbYeah!如果您想连接示例,应该在docker compose环境变量MONGODB_DATABASE=example中定义MONGODB_mongodb://root:password@localhost:27016/example?authSource=admin这也可以工作连接字符串如下:mongodb://root:password@localhost:27016/example?authSource=example,如果您设置了该env变量
/defaultauthdb  
Optional. The authentication database to use if the connection string includes username:password@ authentication credentials but the authSource option is unspecified.

If both authSource and defaultauthdb are unspecified, the client will attempt to authenticate the specified user to the admin database.
mongodb://root:password@localhost:27016/example?authSource=admin