skip to Main Content

I have a quite simple docker-compose.yml that creates an initial volume for a mysql container:

version: '3.7'
services:
  db:
    image: mysql:8.0
    volumes:
      - database:/var/lib/mysql
   
volumes:
  database:
    name: mysql-database

Question: how can I tell docker to create the volume on a specific absolute path on first startup, instead of creating it at /var/lib/docker/volumes/mysql-database/?

I would like to set the target path to /mnt/docker/volumes/mysql-database/ for having it on another disk. But only this volume, not all docker volumes!

Is that possible?

3

Answers


  1. Chosen as BEST ANSWER

    I found a way to create a "named bind mount", having the advantage that docker volume ls will still show the volume, even it is a bindmount:

    Create: docker volume create --driver local --opt type=none --opt device=/mnt/docker/volumes/mysql-database --opt o=bind mysql-database

    Usage:

    volumes:
      database:
        name: mysql-database
        external: true
    

  2. Maybe not use the volumes section since you don’t know where docker puts your data.

    So, specify the full path. It does work for our installation.
    Interested to know when this does not work for your situation.

    version: '3.7'
    services:
      db:
        image: mysql:8.0
        volumes:
          - /mnt/docker/volumes/mysql-database:/var/lib/mysql
    
    Login or Signup to reply.
  3. With the local volume driver comes the ability to use arbitrary mounts; by using a bind mount you can achieve exactly this.

    For setting up a named volume that gets mounted into /mnt/docker/volumes/mysql-database, your docker-compose.yml would look like this:

    volumes:
      database:
        driver: local
        driver_opts:
          type: 'none'
          o: 'bind'
          device: '/mnt/docker/volumes/mysql-database'
    

    By using a bind mount you lose in flexibility since it’s harder to reuse the same volume. But you don’t lose anything in regards of functionality

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search