代码之家  ›  专栏  ›  技术社区  ›  Phil S

Docker Compose中的MongoDb-提供配置

  •  0
  • Phil S  · 技术社区  · 6 年前

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

    我可以让mongo启动,但它似乎进入了localhost-only模式,没有身份验证(即使提供了参数)和设置。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容器启动的那一刻。。。然后几秒钟后死亡,日志中出现连接问题。

    我试过的其他东西

    正在尝试在撰写文件中启用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) 和/或运行脚本以设置默认用户和数据库。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   mbuechmann    6 年前

    你忘了开头 / 在Dockerfile中。这是正确的一行:

    ENTRYPOINT /usr/bin/mongod