🐳 Migrating InfluxDB databases to docker-compose
Tags: dockercompose, docker, influxdb
Published: 2019-02-26 14:20:09

---
title: 🐳 Migrating InfluxDB databases to docker-compose
published: true
description: The tedious steps to undertake if you want to migrate databases from a local InfluxDB install to a docker-compose one.
tags: 
    - docker-compose
    - docker
    - influxdb
---

> __This blogpost was originally publish on my [blog](https://thibmaek.com/post/migrating-influxdb-databases-to-docker-compose)__

# The problem

I got a brand new Intel NUC which I'm planning to use as a server with Docker. Some weeks earlier I had set up InfluxDB on a Raspberry Pi Zero W to collects my Home Assistant data and monitor my machines with Telegraf.

Incorrectly, I guessed that there would be an import/export module in Chronograf which I use to manage my InfluxDB database. The problem seems to be a bit more complicated though. The problem itself lies in the fact that the influxd service needs to be halted before the restoration of a database can happen and to replicate that scenario, you'd have to shut down the Docker container... and also making it useless to act upon.

Follow along for the quickest solution I've found using docker-compose and an intermediate container

## Backing up

On the old host running InfluxDB (Rpi Zero) stop the service and export the databases. The most recent and recommend way of doing so is via the portable method:

```shell
# Ignore this if the service is already running of course.
$ sudo systemctl start influxdb
$ influxd backup -portable -database telegraf ./influxdb-backup/telegraf
$ influxd backup -portable -database home_assistant ./influxdb-backup/home_assistant
$ sudo systemctl stop influxdb
```

After the two databases were backed up, I copied those directories over with scp and then copied them back to NUC where I would run the Docker container

## Restoring

Now I had my InfluxDB container already running to test the connection with Chronograf. Since I think the format is more readable, I use docker-compose to spin up these containers:

```yml
version: '2'

services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - 8086:8086
    volumes:
      - /opt/appdata/influxdb:/var/lib/influxdb
    restart:
      always
```

The steps to restoring include first shutting down this container and then spinning up a throw-away container to copy the backup directories to the locally mounted volume /opt/appdata which will persist in the docker-compose created container.

First, stop our current container with `docker-compose down` (or `docker stop influxdb`)

Create intermediate container that maps the data volume and our backup directory and then enter the container's shell:

```shell
$ docker run --rm --detach -v /opt/appdata/influxdb:/var/lib/influxdb -v /home/thibmaek/influxdb-backup:/backups -p 8086 influxdb:latest
$ docker exec -it mystifying_kepler /bin/bash
```

Inside the intermediate container use the mapped backup folder to restore to our database and exit it afterwards:

```shell
$ influxd restore -portable -database telegraf /backups/telegraf
$ influxd restore -portable -database home_assistant /backups/home_assistant
$ exit
```

Kill and remove the intermediate container. Restart our previous docker-compose container and dbs should be restored:

```shell
$ docker stop mystifying_kepler
$ docker-compose up -d
```