Mongo Express 在 Docker Compose 中等待 MongoDB 集群

问题描述 投票:0回答:1

我正在尝试使用以 MongoDB 集群作为数据库的 Docker Compose 设置本地开发。我选择 Mongo Express 作为数据库管理用户界面,这样我就可以检查 MongoDB 数据库内部。集群接受连接确实需要一些时间,我有 3 个 db 容器作为

depends_on
的一部分,但似乎我必须根据 Docker Compose 文档 here 做更多的事情。我似乎找不到等待 MongoDB 集群的好例子。有人已经知道了吗?请分享,那会很棒。提前谢谢你!

这是

docker-compose.yml
文件:

version: '3.9'

services:
  mongodb-primary:
    image: 'bitnami/mongodb:latest'
    environment:
      - MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
      - MONGODB_REPLICA_SET_MODE=primary
      - MONGODB_ROOT_PASSWORD=password
      - MONGODB_REPLICA_SET_KEY=replicasetkey
    volumes:
      - 'mongodb_master_data:/bitnami'

  mongodb-secondary:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_ADVERTISED_HOSTNAME=mongodb-secondary
      - MONGODB_REPLICA_SET_MODE=secondary
      - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
      - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
      - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password
      - MONGODB_REPLICA_SET_KEY=replicasetkey

  mongodb-arbiter:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
      - MONGODB_REPLICA_SET_MODE=arbiter
      - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
      - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
      - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password
      - MONGODB_REPLICA_SET_KEY=replicasetkey

  dbadmin:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    depends_on:
      - mongodb-primary
      - mongodb-secondary
      - mongodb-arbiter
    environment:
      ME_CONFIG_MONGODB_URL: mongodb://root:password@mongodb-primary:27017,mongodb-secondary:27017,mongodb-arbiter:27017?replicaSet=replicaset
      ME_CONFIG_BASICAUTH_USERNAME: admin
      ME_CONFIG_BASICAUTH_PASSWORD: mexpress

volumes:
  mongodb_master_data:
    driver: local

mongodb docker docker-compose bitnami mongo-express
1个回答
0
投票

如果仍然相关: 我建议为您尝试连接的 mongodb 添加健康检查(可能是主节点)。例子:


services:
  mongo:
    image: mongo
    restart: always
    healthcheck:
      test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --quiet | grep 1
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 20s
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

© www.soinside.com 2019 - 2024. All rights reserved.