在我的项目中,我使用mongodb docker镜像。我希望它在启动期间为我的应用程序创建一个用户。尽管我一直在遵循SO的教程,但我还是无法成功。
我的mongo dockerfile:
FROM mongo:4.2.0-bionic
COPY mongo-init.js /docker-entrypoint-initdb.d/
我的docker撰写:
version: '3.7'
services:
mongo:
build:
context: mongo
dockerfile: Dockerfile
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: mydatabase
MONGO_APP_USERNAME: user
MONGO_APP_PASSWORD: pwd
ports:
- "27017:27017"
healthcheck:
test: ["CMD", "echo", "'db.runCommand(\"ping\").ok'", "mongo","localhost:27017/test","--quiet","1"]
interval: 10s
timeout: 10s
retries: 5
start_period: 40s
我的mongo-init.js
文件:
function getEnvValue(envVar) {
let ret = run("sh", "-c", `printenv ${envVar} >/tmp/${envVar}.txt`);
if (ret != 0) throw Error(`Environment ${envVar} is not set. Aborting...`)
return cat(`/tmp/${envVar}.txt`)
}
const appUsername = getEnvValue("MONGO_APP_USERNAME");
const appPassword = getEnvValue("MONGO_APP_PASSWORD");
let error = true
let res = [
db.createUser(
{
user: appUsername,
pwd: appPassword,
roles: ["readWrite"]
},
{
w: "majority", wtimeout: 5000
}
)
]
printjson(res)
print("THIS IS TEST !!!")
if (error) {
print('Error, exiting')
quit(1)
}
我使用以下方法部署它:
docker-compose -f docker-compose.yml build --force-rm mongo
docker-compose -f docker-compose.yml up mongo
启动MONGO_INITDB_DATABASE
后,未创建数据库,也未创建我的用户。我试图找到一些日志,至少是我在init脚本中放入的调试消息,但是它不存在。
如何解决?