如何通过Docker Compose在Redis容器启动时执行redis-cli命令
Redis Stack容器自动创建搜索索引的正确姿势
你当前配置的问题
- 完全替换了Redis的启动命令:你在Compose里用
command指定执行脚本,导致容器根本没启动Redis服务,直接跑脚本了,这肯定连不上Redis。 - 脚本本身一堆语法问题:
- 没加
#!/bin/sh开头,容器不知道用什么来跑这个脚本 TAG"多写了一个引号,语法直接报错- 末尾的
EOF没头没尾,属于无效内容
- 没加
- 脚本大概率没执行权限:本地挂载进去的脚本默认可能没可执行权限,容器跑不起来
修复后的完整方案
第一步:改好你的索引脚本
把./redis_folder/index-create.sh改成这样:
#!/bin/sh # 别用固定sleep,等Redis真正就绪再操作 until redis-cli PING | grep -q "PONG"; do echo "等Redis启动..." sleep 1 done # 创建索引,修正了引号问题 redis-cli FT.CREATE myIndex ON HASH PREFIX 1 studentPrefixProject SCHEMA studentName TAG SEPARATOR "|"
第二步:调整Docker Compose配置
别替换默认启动命令,而是让容器先启动Redis,再执行脚本,配置改成:
version: "3.9" services: redis-db: container_name: container_name image: "redis/redis-stack" volumes: - ./redis_folder/index-create.sh:/usr/local/etc/redis/index-create.sh ports: - "6379:6379" # 先启动Redis后台运行,执行脚本,最后保持容器不退出 command: > sh -c " redis-server --daemonize yes && /usr/local/etc/redis/index-create.sh && tail -f /dev/null "
第三步:给脚本加执行权限
在本地终端跑这个命令:
chmod +x ./redis_folder/index-create.sh
验证是否成功
启动容器后,跑这个命令检查索引:
docker exec container_name redis-cli FT.INFO myIndex
能看到索引的详细信息就说明成了。
内容的提问来源于stack exchange,提问作者Wrapper
相关产品推荐
相关产品推荐

