添加Docker Compose项目名称后出现数据库连接错误
添加项目名称后出现数据库连接错误,核心原因大概率和WordPress配置文件生成逻辑或Docker构建缓存有关:
wp-config.php未读取最新环境变量
WordPress官方镜像仅在容器首次启动且wp-config.php不存在时,才会读取环境变量生成配置文件。如果你的Dockerfile在构建阶段(multi-stage build的development目标)中提前生成了wp-config.php,或者构建缓存保留了旧的配置文件,那么即使Compose里设置了正确的WORDPRESS_DB_HOST等变量,容器启动时也会直接使用已存在的配置文件,而该配置可能指向旧的网络环境(比如未指定项目名时的服务解析规则)。自定义静态IP的潜在冲突(概率较低)
虽然你执行了docker system prune,但如果宿主机或残留资源仍占用192.168.1.2/3这两个IP,会导致容器无法正常获取静态IP,进而无法通过服务名db解析到数据库地址。不过这种情况通常会在容器启动日志中报错,和你描述的"日志无报错"不符,优先级较低。
验证容器内数据库连通性
进入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连接失败,说明数据库用户/权限配置异常。检查wp-config.php的配置内容
查看容器内的wp-config.php,确认数据库连接参数是否正确:docker compose exec wordpress cat /var/www/html/wp-config.php如果里面的
DB_HOST不是db,而是旧的IP或主机名,说明配置文件未更新。清理构建缓存并重新部署
强制清理WordPress镜像的构建缓存,避免旧配置被保留:docker compose build --no-cache wordpress然后彻底清理旧容器和卷,重新启动服务:
docker compose down -v && docker compose up -d(
-v参数会删除命名卷,确保数据库重新初始化)修改Dockerfile避免提前生成wp-config.php
如果你的Dockerfile中包含生成wp-config.php的命令(比如wp core config),删除这部分逻辑,让WordPress官方镜像的入口脚本在容器启动时自动生成配置,确保读取最新的环境变量。检查网络IP占用情况
查看宿主机网络接口,确认192.168.1.0/24子网未被其他服务占用:ip addr show如果有冲突,修改Compose中的子网配置(比如改成
192.168.2.0/24)。
内容的提问来源于stack exchange,提问作者user1403998

