如何在不丢失 docker 数据的情况下更新 prometheus 配置文件

时间:2021-06-01 18:02:01

标签: docker prometheus self-hosting

我有一个运行 prometheus 的 docker 容器,有时我必须更新容器内的配置文件,问题是我不知道我可以在不删除和再次创建容器的情况下更新这个文件。

 docker run --network="host" -d --name=prometheus -p 9090:9090 -v ~/prometheus.yaml:/etc/prometheus/prometheus.yml  prom/prometheus --config.file=/etc/prometheus/prometheus.yml

我想知道如何更新 prometheus.yaml 而不删除和重新创建 docker 容器。

3 个答案:

答案 0 :(得分:0)

您应该在容器外对 Prometheus 的数据路径进行 VOLUME。 因此,如果容器再次创建,您可以拥有以前的数据。 Prometheus 的默认数据路径是 ./data 但在 docker 中它取决于你的基础镜像。

答案 1 :(得分:0)

理论上你不能,因为原则上容器是短暂的。这意味着它们应该在退出时一次性。但是,有几种方法可以摆脱困境:

#1。从正在运行的容器创建一个新图像:https://www.scalyr.com/blog/create-docker-image/ 以保持状态。

#2。如果选项 1 不适合您,请将您的数据从容器内复制到“外部世界”作为备份(以下是如何操作的说明:https://linuxhandbook.com/docker-cp-example/)。您也可以登录到容器 (docker exec -it <container-name> bash),然后使用 yumapt install(取决于您的基础镜像)来安装必要的工具来制作您的备份(rsync,...),如果有时非常 准系统基本图像不提供这些。

#3。正如@Amir 已经提到的,您应该始终在您的容器内创建一个卷并将其映射到外部世界以获得持久的数据存储。您可以通过 Dockerfile 中的 VOLUME-Keyword 创建一个卷:https://docs.docker.com/storage/volumes/ ..通过这样做,您可以在每次配置更改时重新启动容器,而不必担心数据丢失。

HTH

答案 2 :(得分:0)

使用 reload 网址

<块引用>

Prometheus 可以在运行时重新加载其配置。如果新配置的格式不正确,则不会应用更改。通过向 Prometheus 进程发送 SIGHUP 或向 /-/reload 端点发送 HTTP POST 请求(启用 --web.enable-lifecycle 标志时)触发配置重新加载。这也将重新加载所有配置的规则文件。

使用以下更改容器内的配置:

docker exec -it <container_name> sh

将配置映射到 docker 容器外部以使用

-v <host-path>:<container_path>