Search code examples
dockerdocker-composegrafanadocker-volume

Docker-compose volume resetting when upgrading image


I have a docker image of Grafana 8.0.5. I created a volume using docker volume create grafana-storage

I can stop the volume, and bring it back up with no data loss.

However, if I update my docker-compose.yml to point to the latest version, 8.0.6, and re-run docker-compose up -d the volume goes back to a default install, losing any of my previously created dashboards, accounts, data sources, etc.

As far as I understand, I shouldn't lose any data, since it should all be in the volume. How do you update images without resetting the volume

docker-compose.yml:

version: "3.3"

volumes:
  grafana-storage:
    external: true

services:

  grafana:
    image: "grafana/grafana:8.0.6"
    container_name: "grafana"
    volumes:
      - "grafana-storage:/usr/src/grafana"

Docker Version:

Docker version 20.10.7, build f0df350

Docker-Compose Version:

docker-compose version 1.29.2, build 5becea4c

docker ps:

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                           NAMES
3fb6da4a8de9   grafana/grafana:8.0.6   "/run.sh"                17 minutes ago   Up 17 minutes   3000/tcp                                        grafana
046892ab0a7b   traefik:v2.0            "/entrypoint.sh --pr…"   46 minutes ago   Up 23 minutes   80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   traefik

docker volume ls:

DRIVER    VOLUME NAME
local     grafana-storage

Solution

  • The data is not stored in /usr/src/grafana but in /var/lib/grafana. In consequence, your volume-definition in docker-compose.yml is wrong and everytime the container is recreated, the data is lost.

    Change the path to /var/lib/grafana and it should work:

    services:
      grafana:
        [...]
        volumes:
          - "grafana-storage:/var/lib/grafana"