5
votes

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.

4
Please share your error message in text form, that makes it way more readableNico Haase
i edited the postkmar akrout
Did you try to run the docker command but like linux container and not windows container?GDG612
i did not undrestand. u mean i switch my docker desktop to work with linux containers ?kmar akrout

4 Answers

6
votes

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
3
votes

The error message "Newly created data directory /var/lib/mysql/ is unusable" also comes up because of size issue. Check/increase the underlying server size or the docker allocated size for the system.

1
votes

i think you might doing something like switching the volume or mounting to different mointpoint (by using different plugin switching back and forth). you can fix this by reinitialize the container without depending to previous container.

just remove the old container would fix this like a charm.

docker container prune -f

anyone would like to recreate the issue just create a container and attach the volume to /anyDir by using local driver, then stop the container. recreate again and attach to same dir and now use local-persist driver. stop the container again. now recreate again the container with the first created container's config- (easiest to create this by using swarm or compose)

log

0
votes

In case someone is having the same problem. Switching back to Linux Containers solved the problem for me.

see the images below in order to figure how to to do it ( right click on docker icon below then choose corresponding containers (as a matter of fact if u are using windows containers u will find switch to linux containers and vice versa :

enter image description here

enter image description here