**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
三个月前关门了。
改进这个问题
我在测试一个建立在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
1条答案
按热度按时间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
命令创建集群,然后退出。