Ошибка запуска образа Prometheus Docker, не удается найти файл конфигурации, даже если он существует - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь запустить образ 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

Я проверяю это решение, но оно у меня не сработало.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Проблема здесь:

docker run -v /prometheus-data ...

Вы создали анонимный том и смонтировали его внутри своего контейнера в / prometheus-data.

Когда вы монтируете том, он может быть названным или анонимным. Анонимным томам не присваивается явное имя при первом подключении к контейнеру, поэтому Docker присваивает им случайное имя, которое гарантированно будет уникальным для данного хоста Docker. Помимо имени, именованные и анонимные тома ведут себя одинаково.

Так что этот анонимный том не имеет ничего общего с вашим каталогом на хосте с таким же именем. Или, если быть более точным, том в контейнере маскирует каталог хоста. В любом случае внутри вашего контейнера каталог пуст.

Если вы хотите привязать каталог хоста к каталогу в контейнере, то вы должны указать два аргумента: первый - это каталог вашего хоста (источник), а второй - каталог внутри контейнера (цель)

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

Чтобы избежать путаницы с синтаксисом -v, лучше использовать - mount

Первоначально флаг -v или --volume использовался для автономных контейнеров, а флаг --mount использовался для служб роя. Однако, начиная с Docker 17.06, вы также можете использовать --mount с автономными контейнерами. В общем, --mount является более явным и подробным. Самое большое отличие состоит в том, что синтаксис -v объединяет все параметры в одном поле, а синтаксис --mount разделяет их.

0 голосов
/ 04 апреля 2019

Попробуйте следующее вместо --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

...