我正在按照以下指南尝试将不带身份验证的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
并连接到盒子..这似乎表明我不应该
任何想法我在做什么错?
答案 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