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

Docker设置sentry_redis内存限制报镜像不存在错误排查

问题根因

两个核心认知误区导致操作无效:

  • sentry_redis是docker-compose生成的运行中容器名,不是镜像名。直接执行docker run sentry_redis时,Docker会默认将输入值识别为镜像名,去公共镜像仓库拉取不存在的sentry_redis:latest镜像,自然会报拉取权限错误。
  • 单独修改Redis内部maxmemory参数不生效通常有两个原因:一是修改的本地配置文件没有正确挂载到容器内,Redis实际加载的是默认配置;二是只配置了maxmemory但没有配置对应的内存淘汰策略,内存达到阈值后不会自动清理key,同时Docker默认没有给容器设置内存硬限制,Redis可以占用宿主机全部可用内存。
排查步骤
  • 执行docker inspect sentry_redis | grep Image,确认容器实际使用的镜像名称,明确区分容器名与镜像名的差异。
  • 执行docker exec -it sentry_redis redis-cli CONFIG GET maxmemory、docker exec -it sentry_redis redis-cli CONFIG GET maxmemory-policy,查看Redis运行时实际加载的内存参数,确认本地修改的配置是否真的在容器内生效。
  • 执行docker inspect sentry_redis | grep -A 5 Memory,查看当前容器的cgroup内存限制配置,默认未做限制的容器可以使用宿主机全部内存。
解决方案

永久生效方案(推荐)

Sentry自托管版本基于docker-compose编排,直接修改编排文件配置即可永久生效:

  1. 进入Sentry自托管部署的根目录,找到docker-compose.yml文件,定位到redis服务段(容器名sentry_redis是compose自动生成的,对应编排文件内的服务名是redis)。
  2. 在redis服务配置下新增内存限制与Redis运行参数,注意给Redis进程预留少量缓冲内存,避免触碰Docker硬限制被OOM杀掉:
services:
  redis:
    # 保留原有image、volumes等默认配置不要修改
    mem_limit: 2g
    mem_reservation: 1g
    command: redis-server --maxmemory 1800mb --maxmemory-policy allkeys-lru
  1. 保存配置后执行docker-compose up -d redis,重建redis容器即可生效,不会影响其他Sentry服务正常运行。

临时验证方案

如果需要快速验证限制效果、不用重建容器,可以直接给运行中的容器动态更新内存限制:

docker update --memory 2g --memory-swap 2g sentry_redis

该配置会立即生效,但容器重建后会失效,最终还是需要修改docker-compose配置固化参数。

注意:不要用docker run命令操作已经被docker-compose管理的服务,docker run的作用是创建并启动全新容器,和现有运行中的同名容器没有关系。针对compose服务的操作优先使用docker-compose系列命令,针对单个运行中容器的调整可以用docker update/docker exec等命令。

内容的提问来源于stack exchange,提问作者Eng7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:54:32