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

Better Stack Team
Updated on February 26, 2025

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.