Docker部署WordPress:WordPress可连MySQL但其他PHP程序无法连接
问题排查与解决方案
1. 修复自定义PHP测试脚本的500错误
你的test.php返回500错误,核心原因大概率是数据库连接参数错误:
- 测试脚本必须使用Docker内部服务名作为数据库主机,而非
localhost,正确示例代码如下:
<?php $host = 'db:3306'; $user = 'wordpress'; $pass = 'wordpress'; $dbname = 'wordpress'; $conn = new mysqli($host, $user, $pass, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功"; $conn->close(); ?>
- 若仍报错,可进入WordPress容器验证PHP扩展:
执行命令:docker exec -it $(docker ps -q -f name=wordpress) php -m | grep mysqli
WordPress官方镜像默认包含mysqli扩展,此步骤仅用于排除极端情况。
2. 解决Duplicator无法连接MySQL的问题
Duplicator迁移时的连接失败,本质是迁移配置未使用Docker内部数据库地址:
- 在Duplicator的迁移设置中,数据库主机必须填写
db:3306,而非服务器公网IP或localhost。 - 确认迁移配置中的数据库账号、密码与
docker-compose.yml里的WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD完全一致(均为wordpress)。
3. 清理冗余服务
你的docker-compose.yml中包含的独立php:7.4服务未映射端口、未关联其他服务,属于冗余配置,建议删除以避免文件权限或环境冲突。修改后的配置如下:
version: '3' services: # Database db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress networks: - wpsite # phpmyadmin phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin restart: always ports: - '8080:80' environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: password networks: - wpsite # Wordpress wordpress: depends_on: - db image: wordpress:latest ports: - '8000:80' restart: always volumes: ['./:/var/www/html'] environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress networks: - wpsite networks: wpsite: volumes: db_data:
4. 验证修复效果
- 重启Docker服务:
docker-compose down && docker-compose up -d - 重新访问
localhost:8000/test.php确认连接成功。 - 重新运行Duplicator迁移流程,检查数据库连接状态。
内容的提问来源于stack exchange,提问作者hossein khosromanesh
相关产品推荐
相关产品推荐

