Docker 容器里的 Prometheus 如何持久化数据?
Docker 运行 Prometheus 必须挂载数据卷否则容器删除即丢数据:-v prometheus-data:/prometheus 或绑定宿主机目录。本文给出 docker run 与 compose 两种配置、权限问题与备份建议。
给容器挂数据卷即可: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:
两个常见坑
- 权限问题:官方镜像以
nobody用户运行,绑定宿主机目录时先chown -R 65534:65534 /data/prometheus,否则启动报 permission denied; - 配置文件也建议挂载:只挂数据不挂配置,重建容器后配置又回默认值——把 prometheus.yml 与规则文件一起挂载。
备份与长期保留
数据卷 + 定期快照(Prometheus 的 /api/v1/admin/tsdb/snapshot)可满足备份;需要长期存储与跨实例查询时,上 Thanos/Mimir 或直接把数据写入云端托管服务。
观测云对照
不想维护 TSDB 与数据卷的话:DataKit 采集指标后直传观测云云端存储,本地无状态——采集器随时重建,数据永不丢失,保留策略在控制台按需调整。
常见问题(FAQ)
Q:命名卷和绑定目录选哪个? 测试用命名卷省心;生产用绑定目录便于备份与迁移。
Q:数据能直接拷走迁移吗? 可以,停容器后拷贝数据目录到新实例同位置即可,注意版本兼容性。