Home >Database >Mysql Tutorial >Why Does My Docker MySQL Container Deny Access Despite Setting MYSQL_ROOT_PASSWORD?
Introduction
Attempts to access the MySQL database in a Docker container can yield access denied errors, even when the root password has been set through the MYSQL_ROOT_PASSWORD environment variable. This issue can arise due to a misunderstanding of the impact of pre-existing database data on initialization.
Problem
During container initialization, if the volume mapped to the database data directory (db_data in this case) already contains a database filesystem, the container will respect the existing database and ignore any environment variables related to initialization, including MYSQL_ROOT_PASSWORD. As a result, attempting to access the database with the configured credentials will fail.
Solution
To resolve this issue, ensure that you start the container without a pre-existing database volume. This can be achieved by deleting the data volume using the following command:
docker-compose down -v
Subsequently, bring the container up again with the docker-compose up -d command. This process will erase existing database contents and initialize a new database with the specified root password stored in MYSQL_ROOT_PASSWORD.
Note: Be cautious as the above commands will permanently delete any pre-existing data in the db_data volume. If you wish to preserve this data, make a backup before executing these commands.
Alternative for Bind Mounts
If using a bind mount, manually remove its contents by navigating to the bind mount path and executing the following:
rm -rf /path/to/bind/mount/*
Other Relevant Information
This approach is applicable to the MySQL docker image. However, it's worth noting that other official database docker images, including those for PostgreSQL and MongoDB, adhere to a similar initialization process and may experience similar issues when using pre-existing data volumes.
The above is the detailed content of Why Does My Docker MySQL Container Deny Access Despite Setting MYSQL_ROOT_PASSWORD?. For more information, please follow other related articles on the PHP Chinese website!