【问题标题】:Error starting prometheus docker image, can't find config file even though it exists启动prometheus docker镜像时出错,即使存在也找不到配置文件
【发布时间】:2019-08-25 20:13:30
【问题描述】:

我正在尝试使用以下命令启动 Prometheus docker 映像

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

它给了我以下错误-

level=info ts=2019-04-04T07:00:57.825748769Z caller=main.go:285 msg="no time or size retention was set so using the default time retention" duration=15d
level=info ts=2019-04-04T07:00:57.825814174Z caller=main.go:321 msg="Starting Prometheus" version="(version=2.8.1, branch=HEAD, revision=4d60eb36dcbed725fcac5b27018574118f12fffb)"
level=info ts=2019-04-04T07:00:57.825837922Z caller=main.go:322 build_context="(go=go1.11.6, user=root@bfdd6a22a683, date=20190328-18:04:08)"
level=info ts=2019-04-04T07:00:57.825860337Z caller=main.go:323 host_details="(Linux 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 66c91dea5c1a (none))"
level=info ts=2019-04-04T07:00:57.825884164Z caller=main.go:324 fd_limits="(soft=1048576, hard=1048576)"
level=info ts=2019-04-04T07:00:57.825903925Z caller=main.go:325 vm_limits="(soft=unlimited, hard=unlimited)"
level=info ts=2019-04-04T07:00:57.826527025Z caller=main.go:640 msg="Starting TSDB ..."
level=info ts=2019-04-04T07:00:57.826561753Z caller=web.go:418 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2019-04-04T07:00:57.832311812Z caller=main.go:655 msg="TSDB started"
level=info ts=2019-04-04T07:00:57.832352248Z caller=main.go:724 msg="Loading configuration file" filename=/prometheus-data/prometheus.yml
level=info ts=2019-04-04T07:00:57.83239727Z caller=main.go:509 msg="Stopping scrape discovery manager..."
level=info ts=2019-04-04T07:00:57.832408073Z caller=main.go:523 msg="Stopping notify discovery manager..."
level=info ts=2019-04-04T07:00:57.832414257Z caller=main.go:545 msg="Stopping scrape manager..."
level=info ts=2019-04-04T07:00:57.832420826Z caller=main.go:519 msg="Notify discovery manager stopped"
level=info ts=2019-04-04T07:00:57.832438255Z caller=main.go:505 msg="Scrape discovery manager stopped"
level=info ts=2019-04-04T07:00:57.832450272Z caller=manager.go:736 component="rule manager" msg="Stopping rule manager..."
level=info ts=2019-04-04T07:00:57.832467629Z caller=manager.go:742 component="rule manager" msg="Rule manager stopped"
level=info ts=2019-04-04T07:00:57.832470472Z caller=main.go:539 msg="Scrape manager stopped"
level=info ts=2019-04-04T07:00:57.934588178Z caller=notifier.go:521 component=notifier msg="Stopping notification manager..."
level=info ts=2019-04-04T07:00:57.934683234Z caller=main.go:708 msg="Notifier manager stopped"
level=error ts=2019-04-04T07:00:57.935159211Z caller=main.go:717 err="error loading config from \"/prometheus-data/prometheus.yml\": couldn't load configuration (--config.file=\"/prometheus-data/prometheus.yml\"): open /prometheus-data/prometheus.yml: no such file or directory"

我仔细检查了目录和配置文件是否存在,并检查了目录和配置文件名中的拼写错误。

我错过了什么吗?

我使用的是 ubuntu 18.0.4

我检查了this 解决方案,但它对我不起作用。

【问题讨论】:

    标签: docker prometheus


    【解决方案1】:

    尝试使用以下命令代替 --config.file:

    docker run -p 9090:9090  -d --mount type=bind,source=path/to/prometheus.yml,target=/etc/prometheus/prometheus.yml prom/prometheus
    

    这就是我在 Ubuntu 18.04 上的工作方式

    【讨论】:

    • 运行该命令时出错Error parsing commandline arguments: unknown short flag '-d' prometheus: error: unknown short flag '-d'
    • -d 在后台运行分离的 docker 容器。可能是,您使用的是较旧的 docker 版本?你可以在没有 -d 标志的情况下再试一次吗?请参阅:docs.docker.com/engine/reference/commandline/run 了解更多信息
    • 您需要在镜像名称之前传递 docker 的参数,否则它们将作为命令传递给容器。所以 prom/prometheus 应该在给定示例的末尾。
    【解决方案2】:

    问题出在这里:

    docker run -v /prometheus-data ...
    

    您创建了 anonymous 卷并将其安装在容器中的 /prometheus-data 中。

    当您挂载一个卷时,它可能是命名的或匿名的。匿名卷在首次挂载到容器时没有明确的名称,因此 Docker 为它们提供了一个随机名称,该名称保证在给定的 Docker 主机中是唯一的。除了名称之外,命名卷和匿名卷的行为方式相同。

    所以这个匿名卷与你在主机上的同名目录无关。或者更准确地说,容器中的卷掩盖了主机目录。无论如何,从您的容器内部,目录是空的。

    如果要将主机目录绑定到容器中的目录,则必须提供两个参数:第一个是主机目录(源),第二个是容器内的目录(目标)

    docker run -v /prometheus-data:/prometheus-data ...
    

    为了避免与 -v 语法混淆,最好使用--mount

    最初,-v 或 --volume 标志用于独立容器,而 --mount 标志用于 swarm 服务。但是,从 Docker 17.06 开始,您也可以将 --mount 与独立容器一起使用。通常, --mount 更加明确和详细。最大的区别是 -v 语法将所有选项组合在一个字段中,而 --mount 语法将它们分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2015-10-26
      • 2014-02-20
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      相关资源
      最近更新 更多