【问题标题】:How to run MongoDB and Mongo-express with docker-compose?如何使用 docker-compose 运行 MongoDB 和 Mongo-express?
【发布时间】:2017-12-20 08:18:35
【问题描述】:

我尝试通过 Docker-compose 运行 MongoDB 和 Mongo-express。我使用以下配置:

version: '3'

services:
    mongo:
        image: mongo
        environment:
            - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
            - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
            - MONGO_INITDB_DATABASE=project
    mongo-express:
        image: mongo-express
        environment:
            - ME_CONFIG_MONGODB_SERVER=mongo
            - ME_CONFIG_MONGODB_PORT=27017
            - ME_CONFIG_MONGODB_ENABLE_ADMIN=false
            - ME_CONFIG_MONGODB_AUTH_DATABASE=admin
            - ME_CONFIG_MONGODB_AUTH_USERNAME=${MONGO_ROOT_USER}
            - ME_CONFIG_MONGODB_AUTH_PASSWORD=${MONGO_ROOT_PASSWORD}
            - ME_CONFIG_BASICAUTH_USERNAME=${MONGOEXPRESS_LOGIN}
            - ME_CONFIG_BASICAUTH_PASSWORD=${MONGOEXPRESS_PASSWORD}
        depends_on:
            - mongo
        ports:
          - "8080:8081"

和 .env 文件:

MONGO_ROOT_USER=devroot
MONGO_ROOT_PASSWORD=devroot
MONGOEXPRESS_LOGIN=dev
MONGOEXPRESS_PASSWORD=dev

docker-compose up mongo-service 运行后,mongo-express 失败。我在日志中看到错误:

mongo-express_1  | Welcome to mongo-express
mongo-express_1  | ------------------------
mongo-express_1  | Mongo Express server listening at http://0.0.0.0:8081
mongo-express_1  | Server is open to allow connections from anyone (0.0.0.0)
mongo-express_1  | Database connected
mongo-express_1  | Connecting to admin...
mongo-express_1  | TypeError: db is not a function
mongo-express_1  |     at /node_modules/mongo-express/lib/db.js:114:53
mongo-express_1  |     at Array.forEach (native) 

我做错了什么?感谢您的提前!

【问题讨论】:

    标签: mongodb docker-compose


    【解决方案1】:

    它适用于我的 mac。如果您删除 docker-compose 容器并重建,也许它会起作用。我添加了我的文件。只有我改变了 mongo-express 端口。

    .env

    MONGO_ROOT_USER=devroot
    MONGO_ROOT_PASSWORD=devroot
    MONGOEXPRESS_LOGIN=dev
    MONGOEXPRESS_PASSWORD=dev
    

    docker-compose.yml

    version: '3'
    
    services:
        mongo:
            image: mongo
            environment:
                - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
                - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
                - MONGO_INITDB_DATABASE=project
        mongo-express:
            image: mongo-express
            environment:
                - ME_CONFIG_MONGODB_SERVER=mongo
                - ME_CONFIG_MONGODB_PORT=27017
                - ME_CONFIG_MONGODB_ENABLE_ADMIN=false
                - ME_CONFIG_MONGODB_AUTH_DATABASE=admin
                - ME_CONFIG_MONGODB_AUTH_USERNAME=${MONGO_ROOT_USER}
                - ME_CONFIG_MONGODB_AUTH_PASSWORD=${MONGO_ROOT_PASSWORD}
                - ME_CONFIG_BASICAUTH_USERNAME=${MONGOEXPRESS_LOGIN}
                - ME_CONFIG_BASICAUTH_PASSWORD=${MONGOEXPRESS_PASSWORD}
            depends_on:
                - mongo
            ports:
              - "8888:8081"
    

    Docker 版本

    Client:
     Version:           18.06.0-ce
     API version:       1.38
     Go version:        go1.10.3
     Git commit:        0ffa825
     Built:             Wed Jul 18 19:05:26 2018
     OS/Arch:           darwin/amd64
     Experimental:      false
    
    Server:
     Engine:
      Version:          18.06.0-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       0ffa825
      Built:            Wed Jul 18 19:13:46 2018
      OS/Arch:          linux/amd64
      Experimental:     true
    

    【讨论】:

    【解决方案2】:

    当您的数据库使用卷配置时会出现此问题,但 mongodb 和 mongo-express 不共享网络配置。 这对我来说非常有效:

    version: "3.7"
    
    services:
      db:
        container_name: mongo-dev
        image: mongo:4.2
        environment:
          - MONGO_INITDB_ROOT_USERNAME=admin
          - MONGO_INITDB_DATABASE=auth
          - MONGO_INITDB_ROOT_PASSWORD=pass
        networks: 
          - mongo-compose-network
        ports:
          - '27017:27017'
        volumes: 
          - ./data:/data/db
      
      mongo-express:
        container_name: mongo-express
        image: mongo-express
        depends_on:
          - db
        networks: 
          - mongo-compose-network
        environment:
          - ME_CONFIG_MONGODB_SERVER=mongo-dev
          - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
          - ME_CONFIG_MONGODB_ADMINPASSWORD=pass
          - ME_CONFIG_BASICAUTH_USERNAME=admin
          - ME_CONFIG_BASICAUTH_PASSWORD=tribes
        ports:
          - '8081:8081'
        volumes: 
          - ./data:/data/db      
    
    networks:
      mongo-compose-network:
        driver: bridge
    

    【讨论】:

      【解决方案3】:

      像这样运行它对我有用,也许它可以帮助你

            mongoex:
              image: mongo-express
              environment:
              - ME_CONFIG_OPTIONS_EDITORTHEME=ambiance
              - ME_CONFIG_MONGODB_SERVER=database
              - ME_CONFIG_MONGODB_PORT=27017
              - ME_CONFIG_MONGODB_ENABLE_ADMIN=false
              - ME_CONFIG_MONGODB_AUTH_DATABASE=admin
              ports:
              - "8081:8081"
              links:
              - database
            database:
              image: mongo:latest
              command: --smallfiles
              ports:
                - "27017:27017"
      

      祝你好运和问候!

      【讨论】:

        【解决方案4】:

        新版 mongo-express 中的一些更新,已接受的解决方案不再起作用,特别是您需要修复此问题

        TypeError: Cannot read property 'listDatabases' of undefined
        

        提示

        请记住,如果您调整设置,请使用选项--force-recreate 重新启动它。

        docker-compose up --force-recreate -d
        

        这是我目前正在使用的 docker-compose.yml。

        version: '3'
        
        services:
            mongo:
                image: mongo:${MONGO_TAG}
                environment:
                    - MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
                    - MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
                    - MONGO_INITDB_DATABASE=project
            mongo-express:
                image: mongo-express
                environment:
                    - ME_CONFIG_MONGODB_SERVER=mongo
                    - ME_CONFIG_MONGODB_PORT=27017
                    - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
                    - ME_CONFIG_MONGODB_AUTH_DATABASE=admin
                    - ME_CONFIG_MONGODB_ADMINUSERNAME=${MONGO_ROOT_USER}
                    - ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_ROOT_PASSWORD}
                    - ME_CONFIG_BASICAUTH_USERNAME=${MONGOEXPRESS_LOGIN}
                    - ME_CONFIG_BASICAUTH_PASSWORD=${MONGOEXPRESS_PASSWORD}
                links:
                    - mongo
                ports:
                  - "8081:8081"
        

        【讨论】:

          【解决方案5】:

          Mongo-express更改用户并传递ENV关键字:

          旧:

          - ME_CONFIG_MONGODB_AUTH_USERNAME=${MONGO_ROOT_USER}
          - ME_CONFIG_MONGODB_AUTH_PASSWORD=${MONGO_ROOT_PASSWORD}
          

          新:

           - ME_CONFIG_MONGODB_ADMINUSERNAME=${MONGO_ROOT_USER}
           - ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_ROOT_PASSWORD}
          

          参考: https://hub.docker.com/_/mongo-express

          【讨论】:

            【解决方案6】:

            最简单的方法是在带有 docker-compose.yml 的目录中运行docker-compose up -d

            version: "3"
            services:
              mongo:
                image: "mongo:3-stretch"
              mongo-express:
                image: "mongo-express:latest"
                ports:
                  - "8081:8081"
            

            然后在浏览器中打开http://localhost:8081/

            【讨论】:

              【解决方案7】:

              如果你仍然有这个问题......或者如果其他人非常疯狂地试图弄清楚为什么这些都不起作用......

              运行 docker-compose up --force-recreate

              没有完全重新创建容器(不知道为什么) - 看起来确实如此,但我发现当我在没有 Auth 的情况下进入数据库时​​,它并没有重新创建容器的数据(数据库!),并且我一小时前创建的收藏仍然存在。

              我已经运行了上述命令,还运行了“docker image rm mongo”以及删除了 mongo-express(不需要)

              问题是我必须做一个 'docker container list' 来查看我拥有的两个容器(一个用于 Mongo 本身,一个用于 Mongo 和 Mongo-express - 不确定我需要删除哪个,但我删除了它们两者都...)

              一旦我这样做了,并且从 .env 文件中提取值的“向上”配置工作正常 - 它完成了 INITDB...并在数据库中正确设置了管理员密码!

              因此,如果您曾经使用任何配置创建它来测试它,您将拥有一个容器,它正在重复使用数据(我认为它不会重新创建它以避免数据丢失 - 我的意思是,99.9%时间你只想重新创建程序部分,而不是数据 - 否则你会丢失你的数据库。)

              花了几个小时才弄明白这个……

              【讨论】:

              • 我还要注意,对于所有回答基本上都是这样的人:关闭身份验证,它工作正常!这没有回答 OP 的问题。
              • 好吧,我在 mongo 服务(容器)中添加了端口:和 - 27017:27017,我可以使用 RoboMongo(现在是 T3something)很好地连接它,但是 Mongo-Express部分与管理员连接得很好,但是当您登录时会引发 Auth 错误。无论如何,它看起来不值得将这张图片用于任何事情。他们有身份验证,但无法注销,而且似乎不起作用。我不太确定为什么要使用它而不是只运行 mongo 和一个真实的。无论如何,我希望这对某人有所帮助
              【解决方案8】:

              虽然这篇文章有点老了。我想分享对我有用的 docker-compose.yml。

              下面启动了一个 mongoDB 实例和 mongo-express。

              version: '3.7'
              services:
                mongo_db:
                  image: mongo:4.2.12
                  environment:
                    MONGO_INITDB_ROOT_USERNAME: root
                    MONGO_INITDB_ROOT_PASSWORD: rootpassword
                  ports:
                    - 27017:27017
                  volumes:
                    - /C/Mine/mongoData:/data/db
              
                mongo_express:
                  image: mongo-express:0.54.0
                  environment:
                    - ME_CONFIG_OPTIONS_EDITORTHEME=default
                    - ME_CONFIG_MONGODB_SERVER=mongo_db
                    - ME_CONFIG_MONGODB_PORT=27017
                    - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
                    - ME_CONFIG_MONGODB_AUTH_DATABASE=mydb
                    - ME_CONFIG_MONGODB_ADMINUSERNAME=root
                    - ME_CONFIG_MONGODB_ADMINPASSWORD=rootpassword
                  ports:
                    - "8081:8081"
                  restart: on-failure
                  depends_on:
                    - mongo_db
              

              【讨论】:

                【解决方案9】:

                这是非常有用的东西,但同时不稳定。你需要找到你自己的方式如何写docker-compose.yml对我来说就是这样的

                version: '3'
                services:
                  db:
                    image: mongo:2.6.12
                    container_name: app_db
                    volumes:
                      - store:/data/db
                    ports:
                      - "27017:27017"
                  mongo-express:
                    container_name: mongo-express
                    links:
                      - 'db:mongo'
                    ports:
                      - '8081:8081'
                    environment:
                      - 'ME_CONFIG_OPTIONS_EDITORTHEME=ambiance'
                      - 'ME_CONFIG_BASICAUTH_USERNAME=user'
                      - 'ME_CONFIG_BASICAUTH_PASSWORD=pass'
                    image: mongo-express 
                

                【讨论】:

                  【解决方案10】:

                  docker-compose.yml

                  version: '3'
                  services:
                    mongodb:
                      image: mongo
                      ports:
                        - 27017:27017
                      environment:
                        - MONGO_INITDB_ROOT_USERNAME=admin
                        - MONGO_INITDB_ROOT_PASSWORD=password
                  
                    mongo-express:
                      image: mongo-express
                      ports:
                        - 8081:8081
                      environment:
                        - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
                        - ME_CONFIG_MONGODB_ADMINPASSWORD=password
                        - ME_CONFIG_MONGODB_SERVER=mongodb
                      depends_on:
                        - mongodb
                  

                  保存并进入文件夹并运行 docker-compose up。现在 mongo 将在端口 http://localhost:8081/ 运行。

                  【讨论】:

                  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-02-17
                  • 1970-01-01
                  • 2023-01-31
                  • 1970-01-01
                  • 2021-08-04
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多