Docker 容器里的 Prometheus 如何持久化数据?

Docker 运行 Prometheus 应显式复用持久数据卷;写入容器层的数据会随容器删除丢失,匿名卷重建未必自动复用:-v prometheus-data:/prometheus 或绑定宿主机目录。本文给出 docker run 与 compose 两种配置、权限问题与备份建议。

最佳实践
Docker 容器里的 Prometheus 如何持久化数据?封面

给容器挂数据卷即可:docker run -v prometheus-data:/prometheus ...——官方容器示例通常把 TSDB 写到 /prometheus,实际由 --storage.tsdb.path 决定,挂载命名卷或宿主机目录后,容器删了重建数据还在。

docker run 方式

docker run -d --name prometheus \
  -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v prometheus-data:/prometheus \
  prom/prometheus

docker-compose 方式

services:
  prometheus:
    image: prom/prometheus
    ports: ["9090:9090"]
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
volumes:
  prometheus-data:

两个常见坑

  1. 权限问题:先检查所用镜像版本的运行 UID/GID、宿主映射和挂载标签,仅调整指定数据目录的必要权限;不要假定所有版本均为 65534 或盲目递归 chown;
  2. 配置文件也建议挂载:只挂数据不挂配置,重建容器后配置又回默认值——把 prometheus.yml 与规则文件一起挂载。

备份与长期保留

快照 API /api/v1/admin/tsdb/snapshot 需启用受保护的 admin API(--web.enable-admin-api),并将快照复制到独立存储、测试恢复,留在同一个卷上不构成独立备份;需要长期存储与跨实例查询时,上 Thanos/Mimir 或直接把数据写入云端托管服务。

常见问题(FAQ)

Q:命名卷和绑定目录选哪个? 两者均可用于生产,应按权限、备份、迁移和文件系统兼容性选择。命名卷通常独立于容器,但 docker compose down -v 或显式删卷会删除数据,匿名卷重建不保证自动复用。

Q:数据能直接拷走迁移吗? 可在干净停机后复制完整 TSDB 数据,并核对版本、权限、文件系统与 storage.tsdb.path;不应把不兼容网络文件系统当作透明持久化。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台