使用Docker镜像时,Redis服务器拒绝连接

3

我正在使用Docker启动Postgres、Kibana、Elasticsearch和Redis(使用docker-compose up命令)。然而,Redis启动失败,并出现以下错误。您可以在截图中查看最后一个错误行(显示错误的文件格式)。我该如何解决这个问题呢?此外,我不知道如何在终端中使用Docker运行Redis命令,例如./redis-check-aof --fix,如截图所示?


请问您能否发布您的 docker-compose.yml 文件? - mibrl12
3个回答

7

如Uku所提到的,AOF文件已经损坏,您需要运行一个命令来修复它。针对官方Redis redis:4.0.11-alpine镜像的正确命令是:

docker-compose run redis redis-check-aof --fix appendonly.aof

假设你的redis容器名称为“redis”。按下“y”确认(虽然没有问句,但需要这个输入)。

1
我想在重新从快照构建服务器后,添加一些关于这个问题的额外信息,涉及到一个redis:7的docker容器。
  • Redis将追加文件存储在一个专用目录中,由配置中的appenddirname参数定义(默认为appendonlydir)。
  • 运行docker compose命令会弹出一个对话框,需要输入y/N来回答(实际上,在按下键后,你看不到Continue [y/N];奇怪但是真实的)。按下y后,你将看到一个成功截断的消息。
$ docker compose run --rm -it redis redis-check-aof --fix /data/appendonlydir/appendonly.aof.18.incr.aof

Start checking Old-Style AOF
AOF /data/appendonlydir/appendonly.aof.18.incr.aof format error
AOF analyzed: filename=/data/appendonlydir/appendonly.aof.18.incr.aof, size=25858048, ok_up_to=25857792, ok_up_to_line=511436, diff=256
This will shrink the AOF /data/appendonlydir/appendonly.aof.18.incr.aof from 25858048 bytes, with 256 bytes, to 25857792 bytes
y
Continue? [y/N]: Successfully truncated AOF /data/appendonlydir/appendonly.aof.18.incr.aof

如果你在已经修复过的情况下再次尝试修复,它(希望)会显示文件有效。
Start checking Old-Style AOF
AOF analyzed: filename=/data/appendonlydir/appendonly.aof.18.incr.aof, size=25857792, ok_up_to=25857792, ok_up_to_line=511436, diff=0
AOF /data/appendonlydir/appendonly.aof.18.incr.aof is valid

然后像通常一样启动你的 Redis,如果一切顺利,你应该再次拥有一个可用的容器。

0

编辑: 您的Redis AOF文件已损坏。有两个选项:

1)如果您不关心数据,可以删除卷并重新创建它

2)如果您关心数据,请暂时添加Redis服务的入口点定义:

entrypoint:
 - redis-check-aof
 - --fix
 - /data/appendonly.aof

运行docker-compose up一次,然后将其删除,这样应该可以解决问题。


已执行,显示“未找到 redis_1 容器”,我从未执行过这个命令而且 Redis 之前一直在工作,连接拒绝错误是从昨天开始的。 - Bhavya Dhiman
你能否指定一个完整的命令,包括入口点,以便我在终端上执行? - Bhavya Dhiman
将指定的行添加到 docker-compose.yml 文件中的 redis 部分,然后像平常一样运行 docker-compose up - Uku Loskit
2
确认,它显示“无效参数”并终止容器。 - Archonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接