10

I am trying to load prometheus with docker using the following custom conf file: danilo@machine:/prometheus-data/prometheus.yml:

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

  # A scrape configuration containing exactly one endpoint to scrape:
  # Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

      - targets: ['localhost:8083', 'localhost:8080']
        labels: my_app
      group: 'my_app_group'

With the following command:

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

The file already exists. However, I am getting the following message:

level=error ts=2018-09-26T17:45:00.586704798Z caller=main.go:617 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"

I'm following this guide:

What can I do to load this file correctly?

ThrowsError
  • 1,169
  • 1
  • 11
  • 43
Danilo Caetano
  • 209
  • 2
  • 3
  • 9

4 Answers4

12

By “the file already exists”, do you mean that the file is on your host at /prometheus-data/prometheus.yml? If so, then you need to bind mount it into your container for it to be accessible to Prometheus.

sudo docker run -p 9090:9090 -v /prometheus-data/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

It's covered under Volumes & bind-mount in the documentation.

King Chung Huang
  • 5,026
  • 28
  • 24
6

I am using docker-compose.yaml and I also got the same issue. I had to set volume details as follows.

  prometheus:
    image: prom/prometheus:v2.26.0
    user: root
    ports:
      - 9090:9090
    volumes:
      - /apps/prometheus/configs/prometheus.yaml:/etc/prometheus/prometheus.yaml
      - /data/prometheus:/prometheus
    command: --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml
Udara Seneviratne
  • 2,303
  • 1
  • 33
  • 49
1

I was doing the same and it works when put the whole path like whole path:

sudo docker run -p 9090:9090 -v User/inner-directories.../prometheus-data/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

When you use volumes you have to put paths that are registered on docker config resources

gosanc
  • 11
  • 1
0

Youneed to mount volume on your docker . Solution of @Udara is good but with a mistake on command.

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

Dont forget to add prometheus.yml file under the folder /prometheus-data