You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_DATABASE
    
    禁止使用localhost或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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:42:45