当我添加docker-entrypoint-initdb.d/ www.example.com:ro文件时,我的mongo docker compose无法进行身份验证init-mongo.sh
对接合成
version: "3.1"
services:
mongo1:
container_name: mongo1
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS}
MONGO_INITDB_DATABASE: ${MONGO_DB_NAME}
ports:
- 27017:27017
- 28017:28017
env_file:
- .env
volumes:
- volume-mongo:/data/db
- ./mongo/init-mongo-js.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro
command: ['--auth', '--wiredTigerCacheSizeGB=1']
networks:
- mongo-network
# mongo-express:
# container_name: mongo-express
# image: mongo-express
# restart: always
# ports:
# - '8081:8081'
# env_file:
# - .env
# environment:
# - ME_CONFIG_OPTIONS_EDITORTHEME=ambiance
# - ME_CONFIG_BASICAUTH_USERNAME=${MONGO_USER}
# - ME_CONFIG_BASICAUTH_PASSWORD=${MONGO_PASS}
# - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
# - ME_CONFIG_MONGODB_AUTH_DATABASE=admin
# - ME_CONFIG_MONGODB_SERVER=mongo1
# - ME_CONFIG_MONGODB_ADMINUSERNAME=${MONGO_USER}
# - ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_PASS}
# depends_on:
# - mongo1
# networks:
# - mongo-network
volumes:
volume-mongo:
driver: local
networks:
mongo-network:
driver: bridge
.环境
MONGO_DB_NAME=DBX
MONGO_USER=MYNEWUSERNAME
MONGO_PASS=somesecret
# Mongo host
尝试登录失败
docker exec -it mongo1 mongo admin -u MYNEWUSERNAME -p somesecret
当我删除对init-mongo.sh:ro文件的引用时,它就可以工作了,但是我不能运行我的初始化脚本。
有人提到这篇文章:https://github.com/docker-library/mongo/issues/174
我假设它失败的原因是因为我的bash文件-init-mongo.sh:ro覆盖了这个文件:
if [ "$MONGO_INITDB_ROOT_USERNAME" ] && [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then
rootAuthDatabase='admin'
"${mongo[@]}" "$rootAuthDatabase" <<-EOJS
db.createUser({
user: $(_js_escape "$MONGO_INITDB_ROOT_USERNAME"),
pwd: $(_js_escape "$MONGO_INITDB_ROOT_PASSWORD"),
roles: [ { role: 'root', db: $(_js_escape "$rootAuthDatabase") } ]
})
EOJS
fi
如果这个理论是正确的,那么将它包含到我的脚本中并进行额外的更改似乎是一个很好的解决方案。唯一的问题是在我的vscode中,使用shell-format扩展,这个代码组合的颜色编码看起来不正确,所以我怀疑它是错误的。
init-mongo.sh:ro尝试合并以下内容:
#!/bin/bash
set -e
# set -e causes the whole script to exit when a command fails, so the script can't silently fail and startup mongo.
if [ "$MONGO_INITDB_ROOT_USERNAME" ] && [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then
rootAuthDatabase='admin'
"${mongo[@]}" "$rootAuthDatabase" <<-EOJS
db.createUser({
user: $(_js_escape "$MONGO_INITDB_ROOT_USERNAME"),
pwd: $(_js_escape "$MONGO_INITDB_ROOT_PASSWORD"),
roles: [ { role: 'root', db: $(_js_escape "$rootAuthDatabase") } ]
})
EOJS
fi
mongo <<EOF
use ${MONGO_DB_NAME}
db.createCollection("users")
db.users.insert({"name": "mike"})
EOF
任何帮助修复这个bash脚本的人都很感激。
谢谢
1条答案
按热度按时间krcsximq1#
我已经试验并删除了docker-compose文件中的引用
而是直接在init文件中创建admin用户。
已更新-2023年3月
此外,还有两个其他问题,我已经更新如下:我在引用此脚本时遇到了身份验证问题
1.这是因为新的mongo连接使用'mongosh'而不是'mongo',所以脚本现在是mongosh〈〈EOF - NOT mongo〈〈EOF
1.我不得不清除我的docker卷(因为init脚本)只有在卷尚未创建时才运行-即docker卷rm volume-mongo或docker卷prune
以下步骤重新运行-并为mongo创建了测试身份验证
1.装卸工装配