I created a mysql container using the officially supported mysql image. I ran the image mounting a folder that contains a sql dump, then I created a new database in the container and imported the .sql dump in it:
sudo docker run --name mysql-psat1 -v /opt/Projets/P1/sqldumps:/mnt -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest sudo docker exec -it mysql-psat1 bash > mysql -uroot -psecret -e 'create database liferay_psat1;' > mysql -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql
Then I listed the running containers to get that container’s id:
sudo docker ps -a
Then, I commited the container (with the imported sql) as a new container image
sudo docker commit -m "Imported liferay sql dump" <id-of-the-container> jihedamine/mysql-psat1:v1
However, when if I start a container using that new image, the mysql database doesn’t contain the newly created database liferay_psat1.
sudo docker run -ti jihedamine/mysql-psat1:v1 bash > mysql -uroot -psecret # show databases;
What am I doing wrong?
Thanks for your help!
Advertisement
Answer
The official mysql image stores data in a volume. Normally this is desired so that your data can persist beyond the life span of your container, but data volumes bypass the Union File System and are not committed to the image.
You can accomplish what you’re trying to do by creating your own mysql base image with no volumes. You will then be able to add data and commit it to an image, but any data added to a running container after the commit will be lost when the container goes away.