You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成测试运行后无法连接Docker部署的Redis服务器问题咨询

问题原因
  • Docker Compose配置错误:你给Redis容器设置了hostname: localhost,该配置会干扰容器内部的网络栈解析,部分场景下会导致Redis服务绑定异常。
  • Redis持久化触发崩溃:Redis默认开启RDB自动持久化,你启动时的日志明确提示overcommit_memory配置为0,当测试写入数据触发RDB保存时,需要fork子进程执行写入操作,内存不足时会导致fork失败,Redis进程直接崩溃退出。
  • 无内存限制导致OOM:你没有给Redis设置最大内存限制,也没有给Docker容器配置内存上限,当测试写入大量数据时,Redis占用内存超出宿主机或Docker的阈值,会被系统的OOM Killer直接杀死,导致端口停止监听,出现连接拒绝报错。
  • 测试逻辑存在误操作:部分集成测试的清理逻辑会调用SHUTDOWN等Redis管理命令,直接关闭服务端进程,导致后续无法连接。
解决方案

1. 修正Docker Compose配置

替换你的Redis服务配置为以下内容,移除错误的hostname配置,关闭测试不需要的持久化,增加内存限制:

version: '3'
services:
  redis:
    image: redis
    ports:
      - "6369:6379"
    container_name: redis-integration-test
    mem_limit: 512m
    command: redis-server --save "" --appendonly no --maxmemory 256mb --maxmemory-policy allkeys-lru

配置说明:

  • 移除hostname: localhost避免网络解析异常
  • mem_limit: 512m限制Docker容器最大可用内存为512M
  • --save "" --appendonly no关闭RDB和AOF持久化,集成测试不需要数据落盘,也避免持久化触发的崩溃问题
  • --maxmemory 256mb --maxmemory-policy allkeys-lru限制Redis最大内存为256M,内存满时优先淘汰最近最少使用的键,避免OOM

2. 修复宿主机系统配置

解决Redis启动时的overcommit_memory警告:

  • 临时生效:执行sudo sysctl vm.overcommit_memory=1
  • 永久生效:将vm.overcommit_memory = 1写入/etc/sysctl.conf文件,执行sudo sysctl -p使配置立即生效

3. 排查测试清理逻辑

检查你的集成测试是否存在调用Redis SHUTDOWN命令、或者向Redis发送退出信号的清理代码,移除这类误关服务端的逻辑。

4. 快速验证方法

执行完上述配置后,先启动容器,运行测试后执行docker ps查看Redis容器是否仍处于运行状态,如果还是退出,执行docker logs redis-integration-test --tail 100查看退出前的错误日志,进一步定位问题。

内容的提问来源于stack exchange,提问作者Peter B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:15:04