【问题标题】:MongoDb in Docker Compose - providing a configurationDocker Compose 中的 MongoDb - 提供配置
【发布时间】:2018-10-25 10:02:25
【问题描述】:

已尝试遵循各种指南、文章和 SE 答案,但在尝试将其部署到我们的测试服务器(运行 docker、compose 等的 CentOS 虚拟机)时似乎碰壁了。

我可以启动 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 中的前导 /?入口点 usr/bin/mongod
  • 在 ENTRYPOINT /usr/bin/mongod 或 ENTRYPOINT /usr/bin/mongod 中? (对不起,我对 Linux 很陌生)
  • 这似乎有帮助 (/usr/bin/mongod) - 采用了身份验证设置。感谢您的帮助……完成 99.9% 真是烦人……

标签: linux mongodb docker docker-compose dockerfile


【解决方案1】:

您忘记了 Dockerfile 中的前导 /。这是正确的行:

ENTRYPOINT /usr/bin/mongod

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多