>

저는 테스트 도커 구성 파일에서 3 개의 mongod 서버가있는 컨테이너를 실행하여 복제 세트를 구성합니다 (하나는 기본, 하나는 보조이고 다른 하나는 중재자).

Dockerfile은 다음과 같습니다 :-

FROM mongo:3.6.2
MAINTAINER Shanty
RUN apt-get update && apt-get install -y netcat
COPY ./.docker/mongo_scripts /mongo_scripts
RUN chmod +rx /mongo_scripts/*.sh
EXPOSE 27091 27092 27093
ENTRYPOINT ["/mongo_scripts/rs.sh"]

내 스크립트는 다음과 같습니다 :-

   #!/bin/bash
# shell script to create a simple mongodb replica set (tested on osx)
mkdir -p /mongosvr/rs-0
mkdir -p /mongosvr/rs-1
mkdir -p /mongosvr/rs-2
mongod --dbpath /mongosvr/rs-0 --bind_ip_all --replSet "demo" --port 27091 --pidfilepath /mongosvr/rs-0.pid 2>&1 &
mongod --dbpath /mongosvr/rs-1 --bind_ip_all --replSet "demo" --port 27092 --pidfilepath /mongosvr/rs-1.pid 2>&1 &
mongod --dbpath /mongosvr/rs-2 --bind_ip_all --replSet "demo" --port 27093 --pidfilepath /mongosvr/rs-2.pid 2>&1 &
# wait a bit for the first server to come up
sleep 5
# call rs.initiate({...})
cfg="{
    _id: 'demo',
    members: [
        {_id: 0, host: 'localhost:27091', 'priority':10},
        {_id: 1, host: 'localhost:27092'},
        {_id: 2, host: 'localhost:27093', arbiterOnly: true}
    ]
}"
mongo localhost:27091 <<EOF
var cfg={
    _id: 'demo',
    members: [
        {_id: 0, host: 'localhost:27091', 'priority':10},
        {_id: 1, host: 'localhost:27092'},
        {_id: 2, host: 'localhost:27093', arbiterOnly: true}
    ]
}
    rs.initiate(cfg, { force: true });
EOF

3 개의 mongod 서버를 실행하고 복제 세트 구성을 초기화하는 간단한 스크립트입니다. 그러나 마지막 명령이 성공적으로 실행 된 후 다음 기록됩니다 :-

bye
I NETWORK  [conn1] end connection 127.0.0.1:55178 (2 connections now open)

컨테이너가 멈 춥니 다 :-

mongodb_rs exited with code 0

복제 명령 설정을 보낸 후 replica set config 설정에 문제가있는 것 같습니다.

  • 답변 # 1

    ENTRYPOINT 를 재정의해서는 안됩니다.  Dockerfile에서 mongo 팀에서 컨테이너를 설정하는 데 더 많은 작업을 수행 할 수 있습니다. ENTRYPOINT를 CMD 로 바꾸십시오.

    CMD ["/mongo_scripts/rs.sh"]
    
    

  • 답변 # 2

    추가

    와이즈 비즈 bash 스크립트 끝에서

    새로운 pid로 새로운 프로세스 bash를 시작합니다. 따라서 컨테이너는 죽지 않을 것입니다.

  • 답변 # 3

    스크립트가 mongod 프로세스를 시작할 때 스크립트 범위 내에 만 존재합니다. 따라서 스크립트가 끝나면 각 mongod 프로세스를 종료합니다.

    지속적으로 만들려면 --fork 옵션을 추가해야합니다 :

    와이즈 비즈

  • 답변 # 4

    현재 작동 한 것은 스크립트 끝에 다음 명령을 넣는 것입니다 .-

    sh -c /bin/bash

    여전히 최선의 방법인지 모르겠습니다 .... 여전히 더 나은 솔루션을 찾고 있거나 현재 솔루션이 최고인지 설명을 찾고 있습니다 ...

    Enables a daemon mode that runs the mongod process in the background. By default mongod does not run as a daemon: typically you will run mongod as a daemon, either by using --fork or by using a controlling process that handles the daemonization process (e.g. as with upstart and systemd).

관련 자료

  • 이전 python - numpy 패키지 npz 구성 요소 파일
  • 다음 두 개의 레이블 사이에 여분의 공백이있는 문제 tkinter-python 3x