【问题标题】:Switch Mongodb auth切换 MongoDB 身份验证
【发布时间】:2018-11-30 15:59:17
【问题描述】:

我正在尝试按照以下指南将没有身份验证的 mongodb 切换为一个:

https://docs.mongodb.com/manual/tutorial/enable-authentication/

我正在针对 docker 映像进行测试,因为这似乎是一个不错的简单选择,但目前,当我重新启动服务时,它不会强制用户 --auth 登录!

重新创建的步骤:

1: docker run --name my-mongo -p 27017:27017 -d mongo
2:docker exec -it my-mongo(打开 mongo shell)
3:(运行创建用户代码)
4:重启容器
5:docker exec -it my-mongo mongod --auth --port 27017(返回以下输出)

启用了整个选项安全身份验证!对我来说似乎是个好消息!但我仍然可以做一个

mongo --port 27017 

并连接到盒子..这似乎表明我不应该

任何想法我做错了什么?

【问题讨论】:

    标签: mongodb docker


    【解决方案1】:

    该错误意味着您已经在 27017 运行了一个 mongod,这并不奇怪:在第 1 步,您启动了一个 mongod 实例,当您重新启动容器时,该实例又回来了,所以在第 5 步,创建另一个 mongod会导致端口冲突。

    它们是使用 docker 启用身份验证的更方便的方法。

    docker run -d --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo

    如果您需要更多用户,请将其用作您的 Dockerfile

    FROM mongo:4
    COPY setup.sh /docker-entrypoint-initdb.d/
    

    setup.sh 中输入类似

    mongo=( mongo --host 127.0.0.1 --port 27017 --quiet )
    mongo+=(
        --username="$MONGO_INITDB_ROOT_USERNAME"
        --password="$MONGO_INITDB_ROOT_PASSWORD"
        --authenticationDatabase="$rootAuthDatabase"
    )
    export MONGO_INITDB_DATABASE="${MONGO_INITDB_DATABASE:-testdb}"
    export MONGO_APP_USER=${MONGO_APP_USER:-usr}
    export MONGO_APP_USER_PWD=${MONGO_APP_USER_PWD:-pwd}
    export MONGO_DB_OWNER=${MONGO_DB_OWNER:-dbowner}
    export MONGO_DB_OWNER_PWD=${MONGO_DB_OWNER_PWD:-pwd}
    
    "${mongo[@]}" "$MONGO_INITDB_DATABASE" <<-EOJS
        db.createUser({
            user: $(jq --arg 'user' "$MONGO_APP_USER" --null-input '$user'),
            pwd: $(jq --arg 'pwd' "$MONGO_APP_USER_PWD" --null-input '$pwd'),
            roles: [ { role: 'readWrite', db: $(jq --arg 'db' "$MONGO_INITDB_DATABASE" --null-input '$db') } ]
        });
        db.createUser({
            user: $(jq --arg 'user' "$MONGO_DB_OWNER" --null-input '$user'),
            pwd: $(jq --arg 'pwd' "$MONGO_DB_OWNER_PWD" --null-input '$pwd'),
            roles: [ { role: 'dbOwner', db: $(jq --arg 'db' "$MONGO_INITDB_DATABASE" --null-input '$db') } ]
        })
    EOJS
    

    【讨论】:

    • 嗨 Siyu,谢谢,是的,我知道我可以使用设置的密码启动 docker 映像,我这样做是为了练习,因为我们有一个没有设置它的工作集群,所以想尝试一下它首先在开发机器上工作。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多