DEV Community

Cover image for Docker on Windows 10: running mysql:8.0.30-debian with a custom config file.
Be Hai Nguyen
Be Hai Nguyen

Posted on

3 1

Docker on Windows 10: running mysql:8.0.30-debian with a custom config file.

Steps required to run the official mysql:8.0.30-debian image on Windows 10 with custom config file E:\mysql-config\mysql-docker.cnf.

I want to use my custom config file E:\mysql-config\mysql-docker.cnf, when running the Docker Official Image mysql:8.0.30-debian, on my Windows 10 Pro machine. I'm describing the steps to get this working.

mysql-docker.cnf is the only file in *E:\mysql-config*. Its content:

[mysqld]
default_authentication_plugin=mysql_native_password
log_bin_trust_function_creators=1
Enter fullscreen mode Exit fullscreen mode

❷ For this mysql:8.0.30-debian image, the custom config file is /etc/mysql/conf.d/mysql.cnf.

Its permissions are: owner has read and write; groups and others has only read. Our own custom config file must have the same permissions.

❸ Mount E:\mysql-config\mysql-docker.cnf to change its permissions, we only need the directory. E:\mysql-config** gets translated to **//e/mysql-config. The mounting option is thus:

--mount type=bind,source=//e/mysql-config,target=/etc/mysql/conf.d
Enter fullscreen mode Exit fullscreen mode

The command to run:

E:\>docker run -d -it --rm --name mysql-docker --mount type=bind,source=//e/mysql-config,target=/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pcb.2176310315865259 mysql:8.0.30-debian
Enter fullscreen mode Exit fullscreen mode

Run the container in the interactive mode with the bash process to change config file permissions:

E:\>docker exec -it mysql-docker bash
Enter fullscreen mode Exit fullscreen mode

Verify that we're looking at the Windows 10 Pro directory, which has only this config file, also note its permissions:

root@5b671d85c90b:/# ls -l /etc/mysql/conf.d
Enter fullscreen mode Exit fullscreen mode
total 4
-rwxrwxrwx 1 root root 95 Aug  8 11:41 mysql-docker.cnf
Enter fullscreen mode Exit fullscreen mode

Change permissions to match the corresponding container custom config file. That is, owner has read and write; groups and others has only read:

root@5b671d85c90b:/# cd /etc/mysql/conf.d/
root@5b671d85c90b:/# chmod u+rw-x mysql-docker.cnf
root@5b671d85c90b:/# chmod g+r-wx mysql-docker.cnf
root@5b671d85c90b:/# chmod o+r-wx mysql-docker.cnf
Enter fullscreen mode Exit fullscreen mode

Permissions should now be correct. To verify:

root@5b671d85c90b:/# ls -l
Enter fullscreen mode Exit fullscreen mode
total 4
-rw-r--r-- 1 root root 95 Aug  8 11:41 mysql-docker.cnf
Enter fullscreen mode Exit fullscreen mode

❹ Stop and re-run to verify the custom config file takes effects. This time, also run with proper data persistent volume with the option:

--mount source=mysqlvol,target=/var/lib/mysql
Enter fullscreen mode Exit fullscreen mode

The commands to stop the container and to run are:

E:\>docker stop mysql-docker
E:\>docker run -d -it --rm --name mysql-docker -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pcb.2176310315865259 --mount type=bind,source=//e/mysql-config,target=/etc/mysql/conf.d --mount source=mysqlvol,target=/var/lib/mysql mysql:8.0.30-debian
Enter fullscreen mode Exit fullscreen mode

❺ Verify custom config takes effect. Using the MySQL command line to query values of the custom options. Run the interactive bash shell:

E:\>docker exec -it mysql-docker bash
Enter fullscreen mode Exit fullscreen mode

Launch MySQL command line:

root@dfa641fecc0a:/# mysql -uroot -ppcb.2176310315865259
Enter fullscreen mode Exit fullscreen mode

⓵ Verify default_authentication_plugin=mysql_native_password:

mysql> show variables like 'default_authentication_plugin';
Enter fullscreen mode Exit fullscreen mode
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.01 sec)
Enter fullscreen mode Exit fullscreen mode

⓶ Verify log_bin_trust_function_creators=1. Please note, 1 is reported as ON:

mysql> show variables like 'log_bin_trust_%';
Enter fullscreen mode Exit fullscreen mode
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+
1 row in set (0.00 sec)
Enter fullscreen mode Exit fullscreen mode

❻ Using a Windows MySQL client tool, we should also be able to connect to MySQL in the mysql-docker container. E.g.:

"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql" --protocol=TCP --host=localhost --port=3306 --user=root --password=pcb.2176310315865259
Enter fullscreen mode Exit fullscreen mode

Since the value of default_authentication_plugin is mysql_native_password we should login successfully. I.e. we should not get the error:

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.

✿✿✿

It took me a while to work this one out... I document it so that it could possibly be of some helps for others. I am actually using mysql:8.0.30-debian as my development server. I'll do more documents on it later on. I hope you find this helpful and thank you for reading.

Image of AssemblyAI tool

Transforming Interviews into Publishable Stories with AssemblyAI

Insightview is a modern web application that streamlines the interview workflow for journalists. By leveraging AssemblyAI's LeMUR and Universal-2 technology, it transforms raw interview recordings into structured, actionable content, dramatically reducing the time from recording to publication.

Key Features:
🎥 Audio/video file upload with real-time preview
🗣️ Advanced transcription with speaker identification
⭐ Automatic highlight extraction of key moments
✍️ AI-powered article draft generation
📤 Export interview's subtitles in VTT format

Read full post

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay