linux - Docker Compose 中的 MongoDb - 提供配置
问题描述
已尝试遵循各种指南、文章和 SE 答案,但在尝试将其部署到我们的测试服务器(运行 docker、compose 等的 CentOS vm)时似乎遇到了障碍。
我可以启动 mongo,但它似乎进入了仅本地主机模式而没有身份验证(即使提供了参数),并且 setup .js 脚本似乎也从未运行过。
我想尝试让它充分发挥作用,这样我们的持续集成管道就很好并且易于使用。问题似乎在于,这方面的文档已经过时、零散并且难以拼凑成一个工作整体。
我试过的:
创建了一个设置了一些用户的 JS 文件 (MongoSetup.js)
use admin
db.createUser({ "user" : "superUserAdmin",
"pwd" : "1234",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
} ]
})
db.createUser({ "user" : "writeUser",
"pwd" : "1234",
"roles" : [
{
"role" : "readWrite",
"db" : "FOO"
} ]
})
use FOO
db.createCollection("logs")
此文件中的命令已针对 Mongo CLI 进行了测试,并且似乎运行良好。
创建了一个 Dockerfile 来尝试将此文件复制为构建的一部分:
FROM mongo
COPY MongoSetup.js /docker-entrypoint-initdb.d
ENTRYPOINT usr/bin/mongod
这一点我不太确定,但似乎 .js 文件已复制到主机上的该目录。
最后是 Docker-Compose 文件:(这是一个摘录,但文件是有效的)
mongo-logger:
image: FOOmongo #(the image we created and pushed to our registry using the dockerfile above)
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=1234
- MONGO_INITDB_DATABASE=admin
command: bash -c 'mongo < /docker-entrypoint-initdb.d/MongoSetup.js'
network_mode: "bridge"
volumes:
- mongologger:/data/db
logging:
driver: syslog
options:
syslog-address: "udp://127.0.0.1:514"
ports:
- 27017:27017
目前似乎 mongo 容器启动......然后在几秒钟后死亡,日志中出现连接问题。
我尝试过的其他东西
尝试在 compose 文件中启用 Mongo 身份验证:
command: mongod -auth --bind_ip all
command: mongod --auth --bind_ip all
使用正确的 IP 地址而不是全部。
尝试在 Dockerfile 中使用 Bash 命令:
CMD ["bash","/docker-entrypoint-initdb.d/MongoSetup.js"]
我尝试过以不同的组合添加和删除这些行,但效果不佳。我敢肯定那里有一些新手错误,但这是一个非常令人困惑的鸡尾酒 - mongo、linux、dockerfile、docker-compose 和 docker 命令。
任何人都可以请建议:
1) 如何设置 mongo 以可远程访问的模式启动。
2)和/或运行脚本来设置默认用户和数据库。
谢谢!
解决方案
您忘记了/
Dockerfile 中的前导。这是正确的行:
ENTRYPOINT /usr/bin/mongod
推荐阅读
- informix - 如何在 Informix 数据库中创建用户并限制会话数
- angular - 根据条件动态加载不同的组件
- python - 如何抓取受密码保护的网站
- node.js - Nodemailor 无法跨域发送邮件
- java - 如何在 Java 1.6 中将 UTC 日期转换为本地日期
- angular - PrimeNG TurboTable 排序图标在启用默认排序的情况下不可见
- architecture - DAO 层应该如何实现?一张表 DAO 还是多表 DAO?
- vhdl - VHDL为信号名称分配一个数字
- java - 关闭桌面/本机窗口的Java代码?
- c++ - 在模板实例化中包括和排除类型