Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL on Docker?

Tags:

docker

mysql

i'm new to Docker and still exploring, have this issue which may look silly but i'm really stuck.

so i have a spring bot app that uses a mysql server and i want to run my app on a container.

i managed to do run an ap without my sql. now i'm following this tutorial in order to install mysql in a container and use that container to run my app.

https://medium.com/@itsromiljain/dockerize-rest-spring-boot-application-with-hibernate-having-database-as-mysql-579abcc4edc4

so when i run this command:

 docker run -p 6603:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=test" mysql

i get this error : enter image description here

My guess is because i have MySQL installed and running in my machine, but i'm not convinced because the container is supposed to be isolated.

PS: i'm running docker on a windows 10 machine using windows containers. thank you. EDIT: this is the text format of the ERROR

2019-02-08T09:09:23.467525Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 95 2019-02-08T09:09:23.468063Z 1 [ERROR] [MY-012592] [InnoDB] Operating system error number 95 in a file operation. 2019-02-08T09:09:23.468133Z 1 [ERROR] [MY-012596] [InnoDB] Error number 95 means 'Operation not supported' 2019-02-08T09:09:23.468193Z 1 [ERROR] [MY-012215] [InnoDB] Cannot open datafile './ibdata1' 2019-02-08T09:09:23.468275Z 1 [ERROR] [MY-012959] [InnoDB] Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data! 2019-02-08T09:09:23.468387Z 1 [ERROR] [MY-012929] [InnoDB] InnoDB Database creation was aborted with error Cannot open a file. You may need to delete the ibdata1 file before trying to start up again. 2019-02-08T09:09:24.070144Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2019-02-08T09:09:24.070172Z 0 [ERROR] [MY-013236] [Server] Newly created data directory /var/lib/mysql/ is unusable. You can safely remove it. 2019-02-08T09:09:24.070759Z 0 [ERROR] [MY-010119] [Server] Aborting 2019-02-08T09:09:24.072260Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.15) MySQL Community Server - GPL.

like image 250
kmar akrout Avatar asked Feb 08 '19 09:02

kmar akrout


People also ask

Can I use MySQL with Docker?

Here are the steps you can follow to install the Dockerhub MySQL Container: Step 1: Pull the Docker Image for MySQL. Step 2: Deploy and Start the MySQL Container. Step 3: Connect with the Docker MySQL Container.

Should you run MySQL in Docker?

If you're working on a small project, and are deploying to a single machine, it's completely okay to run your database in a Docker container. Be sure to mount a volume to make the data persistent, and have backup processes in place.


1 Answers

First off: running your exact docker command on my Ubuntu Linux machine runs mysql within the container without problems.

But of course, that is no help to you, so let's look at your problem:

This problem should not be related to the mysql instance running on your local machine, because, as you stated, the application inside the docker container is isolated from the host machine.

It seems that this is a problem with storage. For some reason, the mysql application inside the docker container cannot property use /var/lib/mysql (also, inside the docker container. The error message clearly states this:

... data directory /var/lib/mysql is unusable.

This can be either a problem with your docker installation itself, a problem with the image, or a problem with the configuration of mysql within the container. The second I would say is unlikely, because the mysql docker image is widely used, and considered quite stable. The latter option is always a possibility, but seeing as you are not doing that much different from the examples on the docker hub page, and I am able to run the exact command on my machine, I am inclined to blame the first option.

Have you tried providing the image with a docker volume? (See https://docs.docker.com/storage/ for a global reference)

The simplest type is managed by docker and added to the docker command like this:

-v mysql_data:/var/lib/mysql

Your command then becomes:

docker run -v mysql_data:/var/lib/mysql -p 6603:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=test"  mysql

If you want to mount it to a directory on your host machine, use this argument:

-v <local path>:/var/lib/mysql
like image 52
Jonas Koperdraat Avatar answered Sep 19 '22 22:09

Jonas Koperdraat