How to Persist Data in Prometheus Running in a Docker Container?

Better Stack Team
Updated on November 20, 2024

Persisting data in Prometheus while running it in a Docker container is crucial to ensure that your metrics data is not lost when the container is stopped or removed. Here’s a step-by-step guide on how to achieve this by using Docker volumes to persist the data.

Step 1: Create a Docker Volume

First, create a Docker volume that will be used to store Prometheus data. This volume will ensure that your data persists even if the Prometheus container is removed.

 
docker volume create prometheus_data

Step 2: Create a Prometheus Configuration File

Create a Prometheus configuration file (e.g., prometheus.yml). This file will define the scraping configurations and other settings.

Here’s a simple example of a prometheus.yml configuration:

 
global:
  scrape_interval: 15s  # Default scrape interval

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

Step 3: Run the Prometheus Container

Now, you can run the Prometheus container, mounting the configuration file and the data volume you created earlier.

 
docker run -d \\
  --name prometheus \\
  -p 9090:9090 \\
  -v prometheus_data:/prometheus \\
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \\
  prom/prometheus \\
  --config.file=/etc/prometheus/prometheus.yml \\
  --storage.tsdb.path=/prometheus

Breakdown of the Command

  • d: Run the container in detached mode.
  • -name prometheus: Give the container a name.
  • p 9090:9090: Map port 9090 of the container to port 9090 on the host, allowing you to access the Prometheus web interface.
  • v prometheus_data:/prometheus: Mount the Docker volume prometheus_data to the /prometheus directory in the container, where Prometheus will store its data.
  • v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml: Mount the local Prometheus configuration file into the container.
  • prom/prometheus: Specify the image to use.
  • -config.file=/etc/prometheus/prometheus.yml: Point Prometheus to the configuration file.
  • -storage.tsdb.path=/prometheus: Specify the storage path for Prometheus data.

Step 4: Verify Data Persistence

  1. Access Prometheus: Open your web browser and go to http://localhost:9090 to access the Prometheus interface.
  2. Check the Metrics: After some time, you should see metrics being collected based on the configuration provided in prometheus.yml.
  3. Stop and Restart the Container: To verify that data persists, you can stop and remove the container:

     
    docker stop prometheus
    docker rm prometheus
    
  4. Re-run the Container: When you start the Prometheus container again using the same command, it should retain the previously collected metrics because the data is stored in the Docker volume.

Step 5: Managing the Data Volume

To manage the persistent data, you can list your Docker volumes with:

 
docker volume ls

If you need to remove the volume later (and thus delete all stored metrics), you can do so with:

 
docker volume rm prometheus_data

Conclusion

By following these steps, you can successfully persist Prometheus data in a Docker container using Docker volumes. This setup ensures that your monitoring data is retained across container restarts and removals, allowing for consistent metrics collection and analysis.

Make your mark

Join the writer's program

Are you a developer and love writing and sharing your knowledge with the world? Join our guest writing program and get paid for writing amazing technical guides. We'll get them to the right readers that will appreciate them.

Write for us
Writer of the month
Marin Bezhanov
Marin is a software engineer and architect with a broad range of experience working...
Build on top of Better Stack

Write a script, app or project on top of Better Stack and share it with the world. Make a public repository and share it with us at our email.

community@betterstack.com

or submit a pull request and help us build better products for everyone.

See the full list of amazing projects on github