【问题标题】:How to persist data in Prometheus running in a Docker container?如何在 Docker 容器中运行的 Prometheus 中持久化数据?
【发布时间】:2018-10-05 03:37:19
【问题描述】:

我正在开发一些需要 Prometheus 在重启之间保留其数据的东西。按照说明操作

$ docker volume create a-new-volume
$ docker run \
    --publish 9090:9090 \
    --volume a-new-volume:/prometheus-data \
    --volume "$(pwd)"/prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/prometheus

我在主机的正确目录中有一个有效的prometheus.yml,Prometheus 正在从容器中读取它。目前我只是为了测试目的而抓取了几个 HTTP 端点。

但是当我重新启动容器时,它是空的,没有上次运行的数据。我的 docker run ... 命令将数据保存到 a-new-volume 卷中缺少什么?

【问题讨论】:

标签: docker persistence prometheus


【解决方案1】:

使用默认数据目录,即/prometheus。为此,请使用此行而不是命令中的内容:

...
--volume a-new-volume:/prometheus \
...

在这里找到:https://github.com/prometheus/prometheus/blob/master/Dockerfile

令人惊讶的是image docs中没有提到

【讨论】:

  • 当我这样做时,容器无法启动。我意识到这是因为主机上的目录权限。
  • 为了省去别人弄清楚权限的麻烦:如果您使用绑定挂载来挂载主机目录:chown文件夹到nobody
  • 或者chown 65534:65534 <volume-dir>
  • 有一个拉取请求将此信息添加到官方安装文档:github.com/prometheus/prometheus/pull/8747
【解决方案2】:

我今天遇到了同样的问题,但我使用的是 docker composer 文件。因此,总结了其他答案中的所有内容以及对我有用的内容。如果通过yaml compose file 设置 Prometheus docker...

首先在主机上为该卷创建一个文件夹,例如:

$ mkdir /tmp/prometheus

然后将文件夹所有者更改为nobody,例如(如果需要,使用sudo):

$ chown 65534:65534 /tmp/prometheus

然后在yaml配置文件中添加卷:

prometheus:
  image: prom/prometheus
  container_name: prometheus
  ports:
    - 9090:9090
  volumes:
    - /tmp/prometheus:/prometheus
    - ./prometheus.yml:/etc/prometheus/prometheus.yml

应该可以的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2016-04-09
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多