Laradock中MySQL容器无法启动及域名解析失败问题求助
解决Laradock中MySQL启动失败及DNS解析错误问题
一、修复MySQL初始化失败问题
1. 修正mysql_native_password认证配置
打开Laradock根目录下的.env文件,确保以下配置正确:
MYSQL_VERSION=8.0 # 或你使用的具体版本 MYSQL_ROOT_PASSWORD=your_custom_root_password # 设置非空密码 MYSQL_ALLOW_EMPTY_PASSWORD=no
编辑docker-compose.yml,找到mysql服务块,添加命令参数指定认证插件:
services: mysql: ... command: --default-authentication-plugin=mysql_native_password ...
2. 修复MySQL数据目录权限及清理无效Volume
- 停止所有Laradock容器:
docker compose down - 删除MySQL关联的Docker Volume(注意之前误删的是mssql的volume,现在需操作mysql的):
docker volume rm laradock_mysql - 修复本地数据目录权限(Laradock默认数据目录为
laradock/data/mysql):
(999是MySQL容器内部运行用户的UID,确保容器能读写该目录)sudo chown -R 999:999 ./data/mysql
二、解决DNS解析错误(php_network_getaddresses: getaddrinfo failed)
1. 确保容器在同一网络
检查docker-compose.yml中mysql、adminer、workspace(或你的应用容器)的网络配置,确保它们都加入同一个自定义网络,示例如下:
services: mysql: networks: - default adminer: networks: - default workspace: networks: - default
2. 强制配置Docker Compose使用公共DNS
在.env文件中添加DNS配置:
COMPOSE_DNS=8.8.8.8 COMPOSE_DNS=8.8.4.4
3. 数据库连接使用容器名而非localhost
连接数据库时,主机名填写mysql(即MySQL容器的服务名),而非localhost或127.0.0.1。比如在Adminer中,服务器地址填mysql,用户名填root,密码填你在.env中设置的MYSQL_ROOT_PASSWORD。
三、验证修复结果
- 重新启动Laradock服务:
docker compose up -d mysql adminer - 查看MySQL启动日志,确认无错误:
docker compose logs mysql - 访问Adminer,使用
mysql作为服务器地址登录,检查是否能正常连接数据库。
内容的提问来源于stack exchange,提问作者Ivan Kachula
相关产品推荐
相关产品推荐

