I'm having trouble importing an .sql dump file with docker-compose. I've followed the docs, which apparently will load the .sql file from docker-entrypoint-initdb.d. However, when I run docker-compose up
, the sql file is not copied over to the container.
I've tried stopping the containers with -vf
flag, but that didn't work either. Am I doing something wrong in my .yml script?
I have dump.sql in the directory database/db-dump/ in the root where my compose file is.
frontend: image: myimage ports: - "80:80" links: - mysql mysql: image: mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_USER: dbuser MYSQL_PASSWORD: userpass MYSQL_DATABASE: myimage_db volumes: - ./database/db-dump:/docker-entrypoint-initdb.d
This worked for me,
version: '3.1' services: db: image: mysql command: --default-authentication-plugin=mysql_native_password restart: always volumes: - ./mysql-dump:/docker-entrypoint-initdb.d environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: ecommerce adminer: image: adminer restart: always ports: - 8080:8080
mysql-dump must be a directory. All the .sql's in the directory will be imported.
After many attempts with the volumes setting i found a workaround
I created another image based on mysql with the following in the Dockerfile
FROM mysql:5.6 ADD dump.sql /docker-entrypoint-initdb.d
Then removed the volumes from compose and ran the new image
frontend: image: myimage ports: - "80:80" links: - mysql mysql: image: mymysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_USER: dbuser MYSQL_PASSWORD: userpass MYSQL_DATABASE: myimage_db
This way the dump is always copied over and run on startup
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With