redis docker容器不断退出

3gtaxfhh  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(626)

**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

三个月前关门了。
改进这个问题
我在测试一个建立在centos7基础映像之上的redis容器。
有一个start.sh脚本的入口点,在此之前,我们正在将四个文件复制到容器中。
理想情况下,启动redisserver.sh和rediscluster.sh需要start.sh脚本。然而,容器几乎立刻就存在了。
如果我将入口点更改为redisserver.sh,那么容器可以正常工作,这意味着redisserver正在按预期启动。而且如果我执行到容器中,我也能够成功地运行rediscluster.sh而没有任何问题。
我到底哪里出错了。还有,我如何才能打印一个日志回我的主机进行调试

COPY redis.conf /home/demo/redis/redis.conf
COPY start.sh /home/demo/redis/start.sh
COPY redisServer.sh /home/demo/redis/redisServer.sh 
COPY redisCluster.sh /home/demo/redis/redisCluster.sh 
ENTRYPOINT [ "/bin/bash", "/start.sh" ]

其他脚本的内容如下所示

Content of start.sh
---------------------------

# !/bin/bash

bash redisServer.sh &
sleep 10
bash redisCluster.sh &
Content of redisServer.sh
-------------------------

# !/bin/bash

/usr/src/redis/src/redis-server /usr/src/redis/redis.conf
Content of redisCluster.sh
--------------------------

# !/bin/bash

printf 'yes' | src/redis-cli -h 10.11.0.1 -p 16000 --cluster create 10.11.0.1:16000 10.11.0.2:16000 10.11.0.3:16000
hm2xizp9

hm2xizp91#

如果你只运行你的 start.sh 脚本,它将启动一个后台进程,等待10秒,启动第二个后台进程,然后退出。当脚本退出时,容器也将退出。
在这种情况下,你不需要这么复杂的东西。这个 redis-cli --cluster create 命令只需要为整个集群运行一次,而不是每个节点运行一次。因此,在单个容器级别:
删除 start.sh 脚本。
删除 ENTRYPOINT dockerfile中的行。
CMD ["/usr/src/redis/src/redis-server", "/usr/src/redis/redis.conf"] 相反。
棘手的一点是创建集群,特别是因为redis集群设置根本不支持dns名称。这是为数不多的手动设置容器专用ip地址有用的情况之一(或者,如果你让docker设置它们,你可以使用类似 host 或者这个脚本片段稍后再查找。)您可以 docker-compose run 或者 docker run --rm 一个临时容器,与您的redis容器连接到同一个网络,它只运行 redis-cli 命令创建集群,然后退出。

docker-compose up
docker-compose run redis1 redis-cli -h redis1 -p 16000 --cluster create ...
> yes

相关问题