如何在Docker容器中运行的Prometheus中保存数据?

Mat*_*hew 15 persistence docker prometheus

我正在开发一些需要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
Run Code Online (Sandbox Code Playgroud)

prometheus.yml在主机上的正确目录中有效,并且Prometheus正在容器内读取它.我现在只是为了测试目的而抓取几个HTTP端点.

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

小智 21

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

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

$ mkdir /tmp/prometheus
Run Code Online (Sandbox Code Playgroud)

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

$ chown 65534:65534 /tmp/prometheus
Run Code Online (Sandbox Code Playgroud)

然后在配置文件中添加volume yaml

prometheus:
  image: prom/prometheus
  container_name: prometheus
  ports:
    - 9090:9090
  volumes:
    - /tmp/prometheus:/prometheus
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
Run Code Online (Sandbox Code Playgroud)

应该可以做到这一点。


Rob*_*ert 18

使用默认数据目录,即 /prometheus

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

令人惊讶的是在图像文档中没有提到

  • 为了省去某人确定权限的麻烦:如果您使用绑定挂载来挂载主机目录:“chown”文件夹到“nobody”。 (16认同)
  • 或者 `chown 65534:65534 <volume-dir>` (12认同)
  • 有一个拉取请求将此信息添加到官方安装文档中:https://github.com/prometheus/prometheus/pull/8747 (3认同)