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

Docker 运行 Prometheus 必须挂载数据卷否则容器删除即丢数据:-v prometheus-data:/prometheus 或绑定宿主机目录。本文给出 docker run 与 compose 两种配置、权限问题与备份建议。

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

给容器挂数据卷即可:docker run -v prometheus-data:/prometheus ...——Prometheus 的 TSDB 数据都写在 /prometheus 目录,挂载命名卷或宿主机目录后,容器删了重建数据还在。

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. 权限问题:官方镜像以 nobody 用户运行,绑定宿主机目录时先 chown -R 65534:65534 /data/prometheus,否则启动报 permission denied;
  2. 配置文件也建议挂载:只挂数据不挂配置,重建容器后配置又回默认值——把 prometheus.yml 与规则文件一起挂载。

备份与长期保留

数据卷 + 定期快照(Prometheus 的 /api/v1/admin/tsdb/snapshot)可满足备份;需要长期存储与跨实例查询时,上 Thanos/Mimir 或直接把数据写入云端托管服务。

观测云对照

不想维护 TSDB 与数据卷的话:DataKit 采集指标后直传观测云云端存储,本地无状态——采集器随时重建,数据永不丢失,保留策略在控制台按需调整。

常见问题(FAQ)

Q:命名卷和绑定目录选哪个? 测试用命名卷省心;生产用绑定目录便于备份与迁移。

Q:数据能直接拷走迁移吗? 可以,停容器后拷贝数据目录到新实例同位置即可,注意版本兼容性。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台