docker 安装 prometheus 如何修改启动命令

docker 安装 prometheus 如何修改启动命令

之前采用
docker run --name prometheus -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/:/etc/prometheus/ \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
方式建立的docker ,现在要改成

docker run --name prometheus -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/:/etc/prometheus/ \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.retention.time=400d
进行启动,也就是要保留400天图像数据

尝试用 https://blog.csdn.net/IT_heima/article/details/127937233 这种方法
修改 config.v2.json 修改完毕后一重启 docker又变回原来的配置,各位有没有什么好办法?
docker rm 容器 然后再按上面的命令进行重建docker测试过失败了,只要rm容器,数据就会丢失,
关键是原来的数据必须保留

也尝试过把容器的数据备份出来,等重新部署完毕后再拷贝回去,结果容器起不来了
docker exec -it cfdf4bbda1da  /bin/sh
docker ps -a
cd /home/
docker cp cfdf4bbda1da:/prometheus/data .
rm -f data/lock 
rm -f data/queries.active 

docker stop cfdf4bbda1da
docker rm  cfdf4bbda1da

docker run --name prometheus -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/:/etc/prometheus/ \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.retention.time=400d

docker ps -a
docker exec -it 60f0306ccd60  /bin/sh
exit
cd /home/
docker cp data 60f0306ccd60:/prometheus/
docker exec -it 60f0306ccd60  /bin/sh
exit
docker restart 60f0306ccd60
docker logs
ts=2023-01-05T08:19:54.575Z caller=main.go:819 level=info msg="Stopping scrape discovery manager..."
ts=2023-01-05T08:19:54.575Z caller=main.go:833 level=info msg="Stopping notify discovery manager..."
ts=2023-01-05T08:19:54.575Z caller=main.go:855 level=info msg="Stopping scrape manager..."
ts=2023-01-05T08:19:54.575Z caller=main.go:829 level=info msg="Notify discovery manager stopped"
ts=2023-01-05T08:19:54.575Z caller=main.go:815 level=info msg="Scrape discovery manager stopped"
ts=2023-01-05T08:19:54.575Z caller=main.go:849 level=info msg="Scrape manager stopped"
ts=2023-01-05T08:19:54.575Z caller=manager.go:950 level=info component="rule manager" msg="Stopping rule manager..."
ts=2023-01-05T08:19:54.576Z caller=manager.go:960 level=info component="rule manager" msg="Rule manager stopped"
ts=2023-01-05T08:19:54.576Z caller=notifier.go:600 level=info component=notifier msg="Stopping notification manager..."
ts=2023-01-05T08:19:54.576Z caller=main.go:1088 level=info msg="Notifier manager stopped"
ts=2023-01-05T08:19:54.576Z caller=main.go:1097 level=error err="opening storage failed: 2 errors: get segment range: segments are not sequential; close DB after failed startup: remove /prometheus/data/lock: permission denied"


求解,如果保留原来的数据更改启动方式,谢谢!

望采纳!!点击回答右侧采纳即可采纳!!!我现在写给你

备份旧数据再cp到新容器的方案似乎可行。
报错内容是close DB after failed startup: remove /prometheus/data/lock: permission denied,要不你先把这个/prometheus/data/lock文件权限的问题解决一下,解决了之后再看启动是否正常。

为了修改 Prometheus 的启动命令,可以创建一个新的 Docker 容器并挂载 Prometheus 的数据卷到新容器中。这样就可以在新容器中修改 Prometheus 的启动命令,而不会影响原来的容器,从而避免了数据丢失的问题。

下面是一个示例命令,假设原来的 Prometheus 容器名为 prometheus,数据卷挂载在 /data/docker/prometheus/server/:

# 创建新的容器并挂载数据卷
docker run --name prometheus-new -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/:/etc/prometheus/ \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.retention.time=400d

# 停止并删除原来的容器
docker stop prometheus
docker rm prometheus

# 重命名新的容器为 prometheus
docker rename prometheus-new prometheus
注意在创建新容器时,需要使用 --config.file 指定配置文件的路径,同时使用 --storage.tsdb.retention.time 指定数据保留时间。

仅供参考,望采纳,谢谢。

举个例子,假设你原来使用的命令是:

docker run -d --name prometheus prom/prometheus

你可以这样改变启动命令:


docker run -d --name prometheus -v /path/to/local/data:/prometheus/data prom/prometheus

这样,容器内 /prometheus/data 目录就被挂载到了本地主机的 /path/to/local/data 目录。这样,你就可以在本地主机中保留 Prometheus 的数据,即使容器被删除或重启,这些数据也不会丢失。

你还可以在挂载的目录中使用软链接,从而在保留原来的数据的同时,又可以方便地改变数据存储的位置。例如:

$ mkdir -p /path/to/local/data
$ ln -s /path/to/local/data /path/to/local/link
$ docker run -d --name prometheus -v /path/to/local/link:/prometheus/data prom/prometheus

这样,容器内 /prometheus/data 目录就被挂载到了本地主机的 /path/to/local/link 目录,而 /path/to/local/link 又是一个软链接,指向了 /path/to/local/data 目录。这样,你就可以通过修改 /path/to/local/link 指向的目录来改变数据存储的位置,而不用改变 Docker

在使用 Docker 安装 Prometheus 时可以使用 docker run 命令来启动 Prometheus 服务。

$ docker run -p 9090:9090 prom/prometheus

这条命令将使用 Docker Hub 上的 Prometheus 镜像,并启动一个容器来运行 Prometheus 服务。同时它还将服务的 9090 端口映射到本地主机的 9090 端口,使得可以通过本地主机访问 Prometheus 服务。

如果想要修改 Prometheus 服务的启动命令可以使用下面的方法:

使用自定义的配置文件启动 Prometheus。可以使用 -c 参数来指定自定义的配置文件

$ docker run -p 9090:9090 -v /path/to/custom/config.yml:/etc/prometheus/prometheus.yml prom/prometheus -c /etc/prometheus/prometheus.yml

使用自定义的命令行参数启动 Prometheus。可以在命令后面添加需要的参数

$ docker run -p 9090:9090 prom/prometheus --web.enable-lifecycle

在启动命令中加入环境变量。可以使用 -e 参数来设置环境变量

$ docker run -p 9090:9090 -e PROMETHEUS_LOG_LEVEL=debug prom/prometheus

借鉴下
https://www.ngui.cc/el/1269242.html?action=onClick

在修改 Prometheus 启动命令的时候,如果想要保留原来的数据,您可以尝试以下步骤:

1 在修改启动命令之前,先进入 Prometheus 的容器内部,然后停止 Prometheus 的进程:

# 进入容器
docker exec -it prometheus /bin/bash
# 停止进程
pkill prometheus

2 修改启动命令,然后重新启动容器。

# 修改启动命令,注意后面有两个横线
docker run --name prometheus -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/:/etc/prometheus/ \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.retention.time=400d

# 重启容器
docker restart prometheus

3 再次进入容器内部,启动 Prometheus 进程:

# 进入容器
docker exec -it prometheus /bin/bash
# 启动进程
/bin/prometheus --config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.retention.time=400d

这样,您就可以修改 Prometheus 启动命令,同时保留原来的数据。

希望这些信息对您有帮助。望采纳。

使用 Docker 安装 Prometheus 时,可以通过修改启动命令来更改 Prometheus 的启动配置。

具体来说,你可以使用 docker run 命令来启动 Prometheus 容器,并在命令中使用 -v 选项将本地目录映射到 Prometheus 容器的目录中,以便保留原有的数据。

举个例子,如果你要将 Prometheus 的配置文件和数据目录映射到本地目录 /prometheus-data,可以这样启动 Prometheus 容器:


docker run -d -p 9090:9090 -v /prometheus-data:/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml --storage.tsdb.path=/prometheus-data/data

上面的命令行表示如下:

  1. 使用 docker run 命令来启动 Prometheus 容器
  2. -d 表示在后台运行
  3. -p 9090:9090 将容器的 9090 端口映射到本地的 9090 端口
  4. -v /prometheus-data:/prometheus-data 将本地目录 /prometheus-data 映射到容器目录 /prometheus-data
  5. prom/prometheus 是 Prometheus 镜像名
  6. --config.file=/prometheus-data/prometheus.yml 指定配置文件
  7. --storage.tsdb.path=/prometheus-data/data 指定数据目录

通过这种方式启动 Prometheus 容器可以保留原有的数据并更改启动方式。