切换Mongodb身份验证

时间:2018-11-30 15:59:18

标签: mongodb docker

我正在按照以下指南尝试将不带身份验证的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(返回以下输出)

enter image description here

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

mongo --port 27017 

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

任何想法我在做什么错?

1 个答案:

答案 0 :(得分:0)

该错误表示您已经有一个运行在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
相关问题