【发布时间】:2020-09-23 17:33:17
【问题描述】:
我正在尝试使用我正在处理的节点 API 的 mongodb 实例运行本地 docker 设置。我正在使用找到 here 的 docker 镜像。
我的Dockerfile 如下所示:
FROM mongo
ENV MONGO_INITDB_ROOT_USERNAME root
ENV MONGO_INITDB_ROOT_PASSWORD pw
ENV MONGO_INITDB_DATABASE foo
ADD scripts/init.js /docker-entrypoint-initdb.d/
我想要实现的是,在我的 docker 容器启动时,我想向 mongodb 插入一些虚拟数据,例如:
db.collection('bar').insertOne({foo: 'foo'});
db.collection('bar').insertOne({foo: 'bar'});
db.collection('bar').insertOne({foo: 'baz'});
在官方文档中提到
当一个容器第一次启动时,它会执行文件 带有扩展名 .sh 和 .js 在 /docker-entrypoint-initdb.d。文件将按字母顺序执行 命令。 .js 文件将由 mongo 使用数据库执行 由 MONGO_INITDB_DATABASE 变量指定(如果存在),或 否则测试。您也可以在 .js 脚本中切换数据库。
我遇到了几个问题。运行db.collection('bar) 会告诉我db.collection is not a function。
我已经在 stackoverflow 上查看并尝试了许多不同的解决方案(切换到 docker-compose、使用不同的脚本、创建新用户?等等),但我仍然没有在本地运行任何东西。
如何在启动时在 mongo db 中简单地插入一些虚拟数据?我非常喜欢坚持简单的Dockerfile,而不是切换到任何不同的东西。我只想让我的初始化脚本运行,并使用几个db.collection('bar').insertOne({}) 插入数据。
此外,在 Docker 仪表板(在 mac 上)中,当我单击我的容器时,单击“CLI”按钮,然后键入以下内容:
⚡ docker exec -it 8430a5d39fbfd5e77a034bb563e3ebcaabbd6736c62121740420a190804fcef /bin/sh; exit
# mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("58a59bd0-2fe5-4345-95a3-b78c70f65707") }
MongoDB server version: 4.4.1
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
https://community.mongodb.com
> show dbs
> show collections
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
> db.auth("root", "pw")
Error: Authentication failed.
0
>
我似乎无法进行身份验证,即使我在我的Dockerfile 中设置了MONGO_INITDB_ROOT_USERNAME 和MONGO_INITDB_ROOT_PASSWORD,我想了解为什么会发生这种情况以及如何解决它。
感谢阅读!
【问题讨论】: