简介
尝试在 Docker 中访问 MySQL 数据库即使已通过设置 root 密码,容器也可能会产生访问被拒绝错误MYSQL_ROOT_PASSWORD 环境变量。此问题的出现可能是由于误解了预先存在的数据库数据对初始化的影响。
问题
在容器初始化期间,如果卷映射到数据库数据目录(在本例中为 db_data)已经包含数据库文件系统,容器将尊重现有数据库并忽略与初始化相关的任何环境变量,包括MYSQL_ROOT_PASSWORD。因此,尝试使用配置的凭据访问数据库将失败。
解决方案
要解决此问题,请确保在没有预配置的情况下启动容器现有数据库卷。这可以通过使用以下命令删除数据卷来实现:
docker-compose down -v
随后,使用 docker-compose up -d 命令再次启动容器。此过程将删除现有数据库内容,并使用 MYSQL_ROOT_PASSWORD 中存储的指定 root 密码初始化新数据库。
注意: 请小心,因为上述命令将永久删除 MYSQL_ROOT_PASSWORD 中任何预先存在的数据db_data 卷。如果您希望保留此数据,请在执行这些命令之前进行备份。
绑定挂载的替代方法
如果使用绑定挂载,请通过导航手动删除其内容到绑定挂载路径并执行以下命令:
rm -rf /path/to/bind/mount/*
其他相关信息
此方法适用于MySQL docker镜像。然而,值得注意的是,其他官方数据库 Docker 镜像,包括 PostgreSQL 和 MongoDB 的镜像,都遵循类似的初始化过程,并且在使用预先存在的数据卷时可能会遇到类似的问题。
以上是尽管设置了 MYSQL_ROOT_PASSWORD,为什么我的 Docker MySQL 容器仍拒绝访问?的详细内容。更多信息请关注PHP中文网其他相关文章!