Docker环境下MariaDB启动失败:socket不存在及连接异常求助
Docker环境下MariaDB无法启动:连接失败与sock文件不存在问题排查与解决
核心问题分析
你遇到的两个报错存在关联:
- 无法连接到'mariadb'主机:大概率是Docker网络配置异常,或是MariaDB容器未正常启动
/var/run/mysqld/mysqld.sock不存在:当WordPress用localhost/127.0.0.1作为DB_HOST时,会尝试连接自身容器内的sock文件,但WordPress容器中无MariaDB服务,自然找不到该文件
分步排查与解决
1. 确认MariaDB容器是否正常启动
先执行命令查看容器状态:
docker ps -a
若MariaDB容器状态为Exited,说明启动失败,先排查启动问题:
- 查看容器启动日志:
docker logs <你的MariaDB容器名>
常见启动失败原因:
- 未设置
MYSQL_ROOT_PASSWORD环境变量(MariaDB容器启动必须指定此参数) - 挂载的宿主机数据目录权限错误(容器内MariaDB进程以UID 999运行,需给宿主机目录设置对应权限:
chown -R 999:999 /你的挂载路径) - 镜像版本兼容性问题(可尝试指定稳定版本如
mariadb:10.11)
2. 检查Docker网络配置
容器间通信需在同一网络内,默认bridge网络的容器名解析不稳定,建议使用自定义网络:
- 创建自定义网络:
docker network create wp-network
- 确保MariaDB、WordPress、Nginx三个容器启动时都添加
--network wp-network参数 - 验证容器是否在同一网络:
docker network inspect wp-network
输出的Containers列表应包含三个容器的信息
3. 修正WordPress的DB连接配置
WordPress容器无需通过sock连接MariaDB,直接用容器名+TCP端口通信:
- 在WordPress的环境变量或
wp-config.php中设置:
禁止使用define('DB_HOST', 'mariadb:3306'); // 容器名+默认端口 define('DB_USER', '你的MariaDB用户名'); // 对应MariaDB启动时的MYSQL_USER define('DB_PASSWORD', '你的MariaDB密码'); // 对应MYSQL_PASSWORD define('DB_NAME', '你的WordPress数据库名'); // 对应MYSQL_DATABASElocalhost或127.0.0.1,否则WordPress会尝试连接自身容器内的sock文件
4. 标准容器启动脚本示例
参考以下流程替换为你的路径和密码:
# 创建自定义网络 docker network create wp-network # 启动MariaDB docker run -d \ --name mariadb \ --network wp-network \ -v ./mysql-data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root_pass \ -e MYSQL_DATABASE=wordpress \ -e MYSQL_USER=wp_user \ -e MYSQL_PASSWORD=wp_pass \ mariadb:10.11 # 启动WordPress docker run -d \ --name wordpress \ --network wp-network \ -v ./wp-data:/var/www/html \ -e WORDPRESS_DB_HOST=mariadb:3306 \ -e WORDPRESS_DB_USER=wp_user \ -e WORDPRESS_DB_PASSWORD=wp_pass \ -e WORDPRESS_DB_NAME=wordpress \ wordpress:latest # 启动Nginx(假设你有自定义配置文件) docker run -d \ --name nginx \ --network wp-network \ -p 80:80 \ -v ./nginx-conf:/etc/nginx/conf.d \ nginx:alpine
5. 测试容器间连通性
若仍无法连接,在WordPress容器内测试能否ping通MariaDB:
docker exec -it wordpress ping mariadb
若ping不通,检查网络配置;若能ping通,检查MariaDB用户权限(默认创建的用户权限为%,允许远程连接)
内容的提问来源于stack exchange,提问作者Arrow Stuhl
相关产品推荐
相关产品推荐

