docker-compose 在 mongoDB 中创建复制

标签 docker docker-compose dockerfile

我正在设置一个 docker 容器来使用 docker compose 初始化 Mongo DB 副本集。我无法完成这项工作。我创建了 docker-compose 来调用三个 mongo 实例,但我遇到了解析器问题。下面是我的 Docker-Compose 文件。

    version: '3'
    services:
     mongo-vauto-1:    
        image: "mongo-start"
        build: ./mongo-vAUTO-1
        ports:
          - "30000:27017"
        volumes:
          - ./mongo-vAUTO-1/data:/data/db
        depends_on:
          - "mongo-vauto-2"
          - "mongo-vauto-3"
    
     mongo-vauto-2:
        image: "mongo"
        command: --replSet vAUTO --smallfiles --oplogSize 128
        ports:
          - "40000:27017"
        volumes:
          - ./mongo-vAUTO-2/data:/data/db
    
     mongo-vauto-3:
        image: "mongo"
        command: --replSet vAUTO --smallfiles --oplogSize 128
        ports:
          - "50000:27017"
        volumes:
          - ./mongo-vAUTO-3/data:/data/db
    
     mongo-setup-vauto:
        image: "mongo-setup-vauto"
        build: ./setup
        depends_on:
          - "mongo-vauto-1"
调用 Dockerfile 这是在 ./setup 文件夹中。下面是我的设置
文件
    FROM mongo

    # Create app directory
    WORKDIR vauto-docker/src/config
    
    # Install app dependencies
    COPY replicaSet.js .
    COPY setup.sh .
    
    CMD ["./setup.sh"]
调用 replicaSet.js setup.sh .下面提供了 replicaSet.js 和 setup.sh 文件
    # replicaSet.js
    rsconf = {
        _id : "vAUTO",
        members: [
            {_id : 0, host : "mongo-vauto-1:27017"},
            {_id : 1, host : "mongo-vauto-2:27017"},
            {_id : 2, host : "mongo-vauto-3:27017"}
        ]
    }
    rs.initiate(rsconf);
    rs.conf();


    #  setup.sh 
    echo *********************************
    echo Starting the replica set
    echo *********************************
    
    sleep 10 | echo waiting for the replica set to be intialized
    mongo mongodb://mongo-vauto-1:27017 replicaSet.js
Dockerfile 下面给出了第一个副本集
    FROM mongo
    WORKDIR vauto-docker/src/config
    copy mongo.conf .
    EXPOSE 27017
    CMD ["--config","./mongo.conf"]
我的 mongo.conf 文件有以下代码
    replication:
      oplogSizeMB: 1024
      replSetName: vAUTO
我收到以下错误,
    mongo-vauto-1_1      | parse error: Invalid numeric literal at line 1, column 14
    mongo-vauto-1_1      | parse error: Invalid numeric literal at line 1, column 14
    mongo-vauto-1_1      | Error parsing YAML config file: yaml-cpp: error at line 3, column 1: illegal tab when looking for indentation

最佳答案

这是我在 3 个 mongodb 容器运行后使用第 4 个容器初始化副本集的方法:
Docker-compose 文件

    version: '3'
    services:
    
      mongodb1:
        image: mongo:latest
        networks:
          - alphanetwork
        volumes:
          - data1:/data/db
          - config1:/data/configdb
        ports:
          - 30001:27017
        entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
    
      mongodb2:
        image: mongo:latest
        networks:
          - alphanetwork
        ports:
          - 30002:27017
        entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
    
      mongodb3:
        image: mongo:latest
        networks:
          - alphanetwork
        ports:
          - 30003:27017
        entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
    
      mongoclient:
        image: mongo
        networks:
          - alphanetwork
        depends_on:
          - mongodb1
          - mongodb2
          - mongodb3
        volumes:
          - ./deployment_scripts:/deployment_scripts
        entrypoint:
          - /deployment_scripts/initiate_replica.sh
    
    networks:
      alphanetwork:
    
    volumes:
      data1:
      config1:
initial_replica.sh
    #!/bin/bash
    
    echo "Starting replica set initialize"
    until mongo --host mongodb1 --eval "print(\"waited for connection\")"
    do
        sleep 2
    done
    echo "Connection finished"
    echo "Creating replica set"
    mongo --host mongodb1 <<EOF
    rs.initiate(
      {
        _id : 'rs0',
        members: [
          { _id : 0, host : "mongodb1:27017" },
          { _id : 1, host : "mongodb2:27017" },
          { _id : 2, host : "mongodb3:27017" }
        ]
      }
    )
    EOF
    echo "replica set created"
并且不要忘记chmod +x ./deployment_scripts/initiate_replica.sh授予 docker 执行它的权限。

关于docker-compose 在 mongoDB 中创建复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916275/

相关文章:

docker - 使用 Jenkins 声明性管道为 dockerfile 代理设置构建参数

Docker 构建无法计算缓存 key

docker - 构架网络失败

java - 如何防止每次在Docker Maven插件中运行Docker镜像?

nginx - 在一台主机上的 nginx 后面运行两个 docker compose 应用程序的最佳方式?

docker-compose - Docker Compose 挂载卷错误 : No Such File or Directory

docker - 在 Windows Docker 容器上安装 MS Build Tools 失败

amazon-web-services - 如何使 Docker 镜像在 Fargate 中运行

node.js - 无法在 docker 容器中全局正确安装 npm 包

docker - 卷 - 设备映射如何在 Docker 上工作