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

迁移Docker部署的WordPress至AWS EC2后出现数据库连接错误及phpMyAdmin无法登录问题

迁移Docker部署的WordPress至AWS EC2后出现数据库连接错误及phpMyAdmin无法登录问题

我太懂你现在的糟心了——好好的本地WordPress迁移到AWS EC2的Docker环境,结果连不上数据库,phpMyAdmin也登不进去,明明环境变量和wp-config都核对过了,还是踩坑。咱们一步步来排查解决:

第一步:先确认数据库容器本身是否正常运行

首先得保证MySQL容器是活的,不然后面都是白搭:

  • 执行命令查看所有容器状态:
    sudo docker-compose ps
    
    看看db服务的状态是不是Up,如果是Exit或者Restarting,那先解决容器启动问题。
  • 查看数据库容器的启动日志找报错:
    sudo docker-compose logs db
    
    比如有没有权限问题、架构不兼容(你指定了platform: linux/x86_64,如果你的EC2是ARM架构实例,比如t4g系列,可能还是会有镜像运行问题),或者端口冲突之类的提示。

第二步:检查容器间的网络连通性

Docker Compose默认会创建专属网络,WordPress和phpMyAdmin要能访问到DB容器才行:

  • 进入WordPress容器,测试能不能ping通DB服务名:
    sudo docker-compose exec wordpress ping db
    
    如果ping不通,说明网络配置有问题,检查你的docker-compose.yml里的networks配置是不是所有服务都关联了wpsite网络(看你的配置是对的,但还是确认下)。
  • 再测试数据库端口是否开放:
    sudo docker-compose exec wordpress telnet db 3306
    
    如果能连接上,说明端口没问题;如果连不上,那数据库容器的3306端口可能没正常监听。

第三步:验证MySQL内部的用户权限和数据库存在性

有时候环境变量配置对了,但MySQL里的实际用户权限不对,也会导致连接失败:

  • 进入MySQL容器,用root账号登录:
    sudo docker-compose exec db mysql -uroot -ppassword
    
    这里的密码是你docker-compose.yml里的MYSQL_ROOT_PASSWORD值。
  • 查看wordpress用户的权限范围:
    SELECT user, host FROM mysql.user;
    
    要确保wordpress用户的host是%(允许所有IP访问),如果是localhost,那只有数据库容器内部能访问,WordPress容器连不上。
  • 确认目标数据库存在:
    SHOW DATABASES;
    
    看看列表里有没有wordpress库,没有的话说明数据库初始化失败了。

第四步:排查wp-config.php的环境变量读取问题

你用了getenv_docker函数来读取环境变量,这个是WordPress官方Docker镜像自带的,但如果是你从本地迁移过来的wp-config.php,有可能这个函数不存在,或者环境变量读取异常:

  • 可以先临时改成硬编码测试,把这些行替换掉:
    define( 'DB_NAME', 'wordpress' );
    define( 'DB_USER', 'wordpress' );
    define( 'DB_PASSWORD', 'password' );
    define( 'DB_HOST', 'db:3306' );
    
    然后重启容器sudo docker-compose restart wordpress,看看能不能连接上。如果能,说明是环境变量读取的问题,再排查getenv_docker的配置。

第五步:解决phpMyAdmin的登录问题

这个问题和数据库连接是关联的,先解决上面的数据库问题,同时注意:

  • phpMyAdmin用root账号登录时,要确保root用户的host是%(和上面第三步的检查一样),不然phpMyAdmin容器无法访问root账号。
  • 检查docker-compose.yml里phpMyAdmin的PMA_HOSTS是不是db,和数据库服务名一致,你的配置是对的,但可以确认下。

第六步:AWS EC2的额外注意事项

  • 安全组:你已经开了端口,但要知道容器间的通信是Docker内部网络,和EC2安全组无关,安全组只需要开放8081、8082给外部访问就行,不用开3306端口(开了反而不安全)。
  • 挂载目录权限:你把本地WordPress目录挂载到了容器的/var/www/html,要确保EC2上的这个目录权限是对的,比如给www-data用户读写权限:
    sudo chown -R www-data:www-data ./
    
    不过这个主要影响WordPress文件读写,不是数据库连接问题,但也顺手检查下。

最后:彻底清理重新测试

如果上面都排查过还是不行,可能是旧的卷数据有残留问题,彻底清理后重新初始化:

sudo docker-compose down -v
sudo docker-compose up -d

这个命令会删除所有容器和关联的卷,重新创建容器并初始化数据库,测试是否能正常连接。

备注:内容来源于stack exchange,提问作者coder21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:15:27