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

升级Prometheus容器镜像(v2.41至v2.43)时如何保留卷数据?

解决Prometheus升级后绑定卷数据丢失的问题

问题原因分析

你当前通过local卷的bind驱动选项挂载宿主机目录的配置,在docker-compose重新部署(修改镜像标签)时,可能因权限不匹配或Docker卷管理的特殊行为,导致容器无法正确读取宿主机目录数据,甚至触发Prometheus初始化空目录的逻辑。另外,容器内Prometheus进程的默认用户(UID 65534的prometheus用户)可能没有宿主机挂载目录的读写权限,这也会导致启动时无法加载原有数据,进而创建空的TSDB目录。

解决方案

1. 先确认宿主机数据是否真的丢失

先检查宿主机挂载目录的文件是否还存在:

ls -la /monitor-data/prometheus

如果文件依然存在,说明是容器挂载或权限问题,而非数据真的被删除。

2. 修复宿主机目录权限

确保容器内的prometheus用户能读写宿主机目录:

sudo chown -R 65534:65534 /monitor-data/prometheus
sudo chmod -R 755 /monitor-data/prometheus

3. 简化docker-compose卷配置(推荐)

放弃使用local卷的bind驱动配置,直接用host bind挂载,这种方式更直观且稳定,避免Docker卷管理的潜在问题:
修改后的docker-compose.yml:

version: '3.3'
services:
  prometheus:
    image: prom/prometheus:v2.43.1
    container_name: prometheus
    volumes:
      - ./prometheus/:/etc/prometheus/
      - /monitor-data/prometheus:/prometheus  # 直接绑定宿主机目录
    command:
      - '--web.config.file=/etc/prometheus/web.yml'
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'
# 删除原有的volumes定义块

4. 正确的升级步骤

升级时不要使用会删除卷的命令,执行以下步骤:

# 停止当前容器(不删除数据)
docker-compose stop prometheus
# 拉取新镜像并重新启动容器
docker-compose up -d prometheus

5. 验证数据保留

容器启动后,通过Prometheus UI或API检查是否能看到历史监控数据:

curl http://localhost:9090/api/v1/query?query=up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:27:16