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

添加Docker Compose项目名称后出现数据库连接错误

问题原因分析

添加项目名称后出现数据库连接错误,核心原因大概率和WordPress配置文件生成逻辑或Docker构建缓存有关:

  1. wp-config.php未读取最新环境变量
    WordPress官方镜像仅在容器首次启动且wp-config.php不存在时,才会读取环境变量生成配置文件。如果你的Dockerfile在构建阶段(multi-stage build的development目标)中提前生成了wp-config.php,或者构建缓存保留了旧的配置文件,那么即使Compose里设置了正确的WORDPRESS_DB_HOST等变量,容器启动时也会直接使用已存在的配置文件,而该配置可能指向旧的网络环境(比如未指定项目名时的服务解析规则)。

  2. 自定义静态IP的潜在冲突(概率较低)
    虽然你执行了docker system prune,但如果宿主机或残留资源仍占用192.168.1.2/3这两个IP,会导致容器无法正常获取静态IP,进而无法通过服务名db解析到数据库地址。不过这种情况通常会在容器启动日志中报错,和你描述的"日志无报错"不符,优先级较低。

排查与解决步骤
  1. 验证容器内数据库连通性
    进入WordPress容器,直接测试与数据库的连通性:

    # 进入WordPress容器
    docker compose exec wordpress bash
    # ping db服务,检查是否能解析到IP
    ping db
    # 用mysql客户端测试连接
    mysql -h db -u wp_user -pwp_password wp_database
    

    如果ping不通db,说明网络解析有问题;如果mysql连接失败,说明数据库用户/权限配置异常。

  2. 检查wp-config.php的配置内容
    查看容器内的wp-config.php,确认数据库连接参数是否正确:

    docker compose exec wordpress cat /var/www/html/wp-config.php
    

    如果里面的DB_HOST不是db,而是旧的IP或主机名,说明配置文件未更新。

  3. 清理构建缓存并重新部署
    强制清理WordPress镜像的构建缓存,避免旧配置被保留:

    docker compose build --no-cache wordpress
    

    然后彻底清理旧容器和卷,重新启动服务:

    docker compose down -v && docker compose up -d
    

    (-v参数会删除命名卷,确保数据库重新初始化)

  4. 修改Dockerfile避免提前生成wp-config.php
    如果你的Dockerfile中包含生成wp-config.php的命令(比如wp core config),删除这部分逻辑,让WordPress官方镜像的入口脚本在容器启动时自动生成配置,确保读取最新的环境变量。

  5. 检查网络IP占用情况
    查看宿主机网络接口,确认192.168.1.0/24子网未被其他服务占用:

    ip addr show
    

    如果有冲突,修改Compose中的子网配置(比如改成192.168.2.0/24)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:09:58