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

Docker部署WordPress无法连接MySQL,应使用何种数据库主机名?

Docker搭建WordPress数据库连接问题解决

问题背景

在Mac上使用Docker Compose搭建本地WordPress网站,使用的docker-compose.yml配置如下:

version: '3'
services:
  db:
    platform: linux/x86_64
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - wordpress_db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

  wordpress:
    image: wordpress:php7.4-apache
    depends_on:
      - db
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}

volumes:
  wordpress_db:

数据库常量定义在.env文件中,执行docker-compose up -d无异常,且能通过Sequel Ace等GUI工具访问数据库,但访问http://localhost:8000时出现错误:

Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /var/www/html/wp-includes/class-wpdb.php on line 1987

No such file or directory

尝试修改wp-config.php中的DB_HOST为localhost或127.0.0.1后,出现新错误:

Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /var/www/html/wp-includes/class-wpdb.php on line 1987

Connection refused

解决方案

正确的数据库主机名应为db,也就是docker-compose.yml中定义的数据库服务名称。

原因说明

  1. Docker Compose会自动为同一项目下的所有容器创建专属网络,容器之间可以通过服务名称直接通信,服务名会被Docker DNS解析为对应容器的IP地址。
  2. 若设置localhost或127.0.0.1,WordPress容器会尝试连接自身内部的数据库服务(但容器内并未安装MySQL),因此会出现连接拒绝或找不到文件的错误。宿主机的端口映射(3306:3306)仅用于外部客户端(比如你的Mac)访问数据库,容器间通信无需依赖端口映射。

额外检查点

  • 若之前手动修改过wp-config.php,需确认DB_HOST是否被设置为db。如果被覆盖,可直接修改DB_HOST为db,或者删除wp-config.php后重启容器(WordPress镜像会自动读取环境变量重新生成配置文件,注意备份自定义配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:05:18