我正在使用默认的 MongoDB Docker 映像,并尝试为数据库创建一个新用户。
我目前正在尝试这样做:
FROM docker.io/mongo:3.2
MAINTAINER <alexandernst> [email protected]
ADD create_ddbb.js /tmp/
RUN mongod --fork --logpath /var/log/mongodb.log \
&& sleep 5 && mongo foobar /tmp/create_ddbb.js
还有create_ddbb.js
:
db.createUser(
{
user: "*******",
pwd: "*******************",
roles: [
{ role: "readWrite", db: "foobar" }
]
}
);
当我构建 Dockerfile 时,我看到:
Step 4 : RUN mongod --fork --logpath /var/log/mongodb.log && sleep 5 && mongo foobar /tmp/create_ddbb.js
---> Running in 58ba44d02508
about to fork child process, waiting until server is ready for connections.
forked process: 9
child process started successfully, parent exiting
MongoDB shell version: 3.2.6
connecting to: foobar
Successfully added user: {
"user" : "***********",
"roles" : [
{
"role" : "readWrite",
"db" : "foobar"
}
]
}
---> e73b6c8c8b83
Removing intermediate container 58ba44d02508
Successfully built e73b6c8c8b83
这样用户就创建了,但是当我尝试连接时,我得到:
mongo_1 | 2016-05-13T17:44:02.159+0000 I NETWORK [initandlisten] connection accepted from 172.20.0.4:41294 #1 (1 connection now open)
mongo_1 | 2016-05-13T17:44:02.160+0000 I ACCESS [conn1] SCRAM-SHA-1 authentication failed for ********* on foobar from client 172.20.0.4 ; UserNotFound: Could not find user *********@foobar
mongo_1 | 2016-05-13T17:44:02.160+0000 I NETWORK [conn1] end connection 172.20.0.4:41294 (0 connections now open)
为什么会发生这种情况?我该如何保留创建的用户?
答案1
我的解决方案:
在你的Dockerfile
:
ADD create_ddbb.js /tmp/
RUN mongod -f /etc/mongod.conf --fork --logpath /var/log/mongodb.log \
&& sleep 5 \
&& mongo <YOUR DATABASE> /tmp/create_ddbb.js
在 - 的里面create_ddbb.js
:
db.createUser(
{
user: "your_user",
pwd: "********************",
roles: [
{ role: "dbOwner", db: "your_database" }
]
}
,
{
w: "majority",
wtimeout: 5000
}
);
db.createCollection("test");
最后的createColleciton("test")
非常重要。如果没有它,createUser
就不适用。我不知道具体原因,抱歉。
答案2
应该在管理数据库中添加用户,如下所示:
RUN mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js
答案3
我无法让@alexandernst的解决方案运行。结合https://github.com/docker-library/mongo/issues/329我只需要创建我的 Dockerfile 就可以了。
FROM docker.io/mongo:latest
COPY create_ddbb.js /docker-entrypoint-initdb.d/
create_ddbb.js 与@alexandernst 的类似,但没有创建测试集合的最后一行。
答案4
Pranu Pranav 的解决方案的一个示例如下:
https://github.com/LukeMwila/multi-container-nginx-react-node-mongo/blob/master/docker-compose.yml