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

Docker Compose下WordPress与MySQL连接失败问题求助

Docker Compose WordPress环境连接问题排查

环境配置文件

docker-compose.yml

version: '3.8'

services:
  wordpress:
    image: wordpress:6
    container_name: wp_dev
    environment:
      WORDPRESS_DB_HOST: ${MYSQL_HOST}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "8008:80"
    volumes:
      - ./wp-data:/var/www/html

  db:
    image: mysql:5
    container_name: mysql_dev
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "3305:3306"
    volumes:
      - db_data_dev:/var/lib/mysql

  adminer:
    image: adminer:latest
    container_name: adminer_dev
    ports:
      - "8080:8080"

volumes:
  db_data_dev:

初始.env文件(连接报错)

MYSQL_HOST=db:3305
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=user
MYSQL_PASSWORD=user_pw

正常连接的.env文件

MYSQL_HOST=db
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress

修正端口后的.env文件(仍报错)

MYSQL_HOST=db # alternativ db:3306
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=user
MYSQL_PASSWORD=user_pw

问题现象

  • 使用初始.env或修正端口后的.env时,WordPress无法连接MySQL,出现连接错误
  • 使用账号密码均为wordpress的.env配置时,连接完全正常

核心问题分析

  1. MySQL用户权限限制
    MySQL 5镜像初始化时,自定义用户(如user)默认的访问权限是user@localhost,仅允许本地连接。但WordPress容器通过Docker内部网络访问MySQL,来源是容器IP/服务名,并非localhost,因此会被拒绝。而使用wordpress作为用户名时,镜像会自动配置该用户允许从%(任意来源)访问,所以能正常连接。

  2. 数据卷残留的历史配置
    第一次用错误配置启动后,db_data_dev数据卷已保存了MySQL的初始化数据(包括用户权限)。后续修改.env重启容器时,MySQL不会重新初始化数据库和用户,而是直接加载已有数据卷的配置,导致自定义用户的权限问题持续存在。

  3. 端口配置的误解
    Docker Compose服务间通信使用容器内部端口,而非宿主机映射端口。初始配置中MYSQL_HOST=db:3305是错误的——3305是宿主机端口,MySQL容器内部实际监听3306,服务间通信应使用db(默认端口3306可省略)或db:3306,但这不是导致连接失败的核心原因。

解决方案

  1. 清理旧数据卷
    删除已存在的MySQL数据卷,让容器重新初始化用户和权限:
docker-compose down -v

该命令会停止并删除容器,同时清除关联的命名数据卷(包括db_data_dev)。

  1. 修正.env配置
    确保MYSQL_HOST使用正确的服务名:
MYSQL_HOST=db
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=user
MYSQL_PASSWORD=user_pw
  1. 重新启动容器
docker-compose up -d

此时MySQL会重新初始化,创建user用户并赋予其从任意来源访问wordpress数据库的权限,WordPress即可正常连接。

验证方式

通过Adminer确认连接:

  • 访问http://localhost:8080
  • 服务器填db,用户名填user,密码填user_pw,数据库填wordpress,点击登录验证是否能正常访问。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:43