Docker容器自动终止

时间:2018-03-18 07:24:06

标签: mongodb docker docker-compose mongodb-replica-set

我正在开发一个测试docker-compose文件来运行一个带有三个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

它是一个运行三个mongod服务器的简单脚本,并初始化副本集配置。 但是在最后一个命令成功执行后,以下内容 记录: -

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

我的容器停止了: -

mongodb_rs exited with code 0

我想这是设置副本集配置的一些问题,之后会发送一些终止命令....

4 个答案:

答案 0 :(得分:0)

你不应该覆盖Dockerfile中的ENTRYPOINT,因为它可能会为mongo团队设置容器做更多的事情。尝试用CMD

替换ENTRYPOINT
CMD ["/mongo_scripts/rs.sh"] 

答案 1 :(得分:0)

添加

  

sh -c / bin / bash

在bash脚本的末尾。它将使用新的pid启动一个新的进程bash。所以你的容器不会死。

答案 2 :(得分:0)

当你的脚本启动一个mongod进程时,它只存在于脚本的范围内;所以当脚本结束时,它会关闭每个mongod进程。

要使它们持久,您需要添加--fork option

  

启用在后台运行mongod进程的daemon模式。默认情况下,mongod不作为守护程序运行:通常使用--fork或使用处理守护进程的控制进程(例如与upstart和systemd一样)运行mongod作为守护程序。

答案 3 :(得分:0)

现在唯一有用的是我在脚本末尾添加了以下命令: -

sleep infinity

我仍然不知道它是否是最好的方式....仍在寻找更好的解决方案,或解释当前的一个是最好的....