Stepan Salin
Stepan Salin

Reputation: 179

docker-compose: reinitializing MySQL db every time

We have a Rails app with MySQL as DB. The db part of docker-compose.yml looks like

  db:
    image: mysql
    env_file:
      - ma.env
    volumes:
      - ./dump-db:/docker-entrypoint-initdb.d
      - ./my.cnf:/etc/mysql/my.cnf
    restart: always
    ports:
      - "3306:3306"
    environment:
            - MYSQL_HOST=

and under ./dump-db folder there actually is an sql-dump of our db.

Problem is, we need to have that exact dump loaded each and every time docker-compose up is run. MySQL docker image works in such a way, that it stores it's data on host machine and therefore your db-service is not stateless.

What we need is that db service discarded all changes done within docker-compose up previous run and fresh-started with that exact dump.

Upvotes: 3

Views: 17681

Answers (2)

Stepan Salin
Stepan Salin

Reputation: 179

SOLVED

actually, ideas above gave me some insight to RTM and here goes

  • Get your own MySQL Dockerfile
  • Remove the VOLUME line from it, where it mentions that /var/lib/mysql should be mounted on host.
  • docker-compose up --force-recreate db

Upvotes: 3

JesusTinoco
JesusTinoco

Reputation: 11828

If you don't want to keep the data each time that you execute the docker-compose up you have to remove the volumes created by the execution of this command.

To achieve that you can execute the following command, that will remove the db service with the volumes declared in the volumes section.

docker-compose down -v db

Upvotes: -1

Related Questions