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

Docker WordPress容器无法连接Docker MySQL容器问题求助

问题根源:Docker容器的网络隔离

这个问题其实是Docker网络隔离的典型坑——容器里的127.0.0.1和你宿主机的127.0.0.1根本不是一回事!你在宿主机上用Tinker、PHP脚本或Sequel Pro能连MySQL,是因为你访问的是宿主机本地的回环地址;但WordPress运行在Docker容器里,容器内部的127.0.0.1指向的是容器自己的网络栈,不是宿主机,所以自然连不上目标MySQL服务。

分场景解决方案

场景1:MySQL运行在另一个Docker容器中

这是Docker多容器部署的常规场景,正确做法是利用Docker自定义网络让两个容器互通:

  1. 创建自定义Docker网络(比默认bridge网络更稳定,支持容器名解析):
    docker network create wp-mysql-network
    
  2. 启动MySQL容器并加入该网络:
    docker run -d \
      --name mysql-container \
      --network wp-mysql-network \
      -e MYSQL_ROOT_PASSWORD=root \
      -e MYSQL_DATABASE=wp_db \
      mysql:latest
    
  3. 启动WordPress容器并加入同一网络,同时把DB_HOST设为MySQL容器的名称(mysql-container):
    docker run -d \
      --name wp-container \
      --network wp-mysql-network \
      -p 10000:80 \
      -e WORDPRESS_DB_HOST=mysql-container:3306 \
      -e WORDPRESS_DB_USER=root \
      -e WORDPRESS_DB_PASSWORD=root \
      -e WORDPRESS_DB_NAME=wp_db \
      wordpress:latest
    
    用Docker Compose的话配置更简洁:
    version: '3.8'
    services:
      mysql:
        image: mysql:latest
        environment:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: wp_db
        networks:
          - wp-net
      wordpress:
        image: wordpress:latest
        ports:
          - "10000:80"
        environment:
          WORDPRESS_DB_HOST: mysql:3306
          WORDPRESS_DB_USER: root
          WORDPRESS_DB_PASSWORD: root
          WORDPRESS_DB_NAME: wp_db
        networks:
          - wp-net
    networks:
      wp-net:
        driver: bridge
    

场景2:MySQL运行在宿主机(非Docker容器)

这种情况需要让WordPress容器访问宿主机的MySQL服务:

  • Linux系统:可以用宿主机的内网IP(比如192.168.1.100),或者Docker 20.10+版本支持的host.docker.internal(启动容器时需加--add-host=host.docker.internal:host-gateway参数)。
  • macOS/Windows系统:Docker Desktop默认支持host.docker.internal作为宿主机别名,直接用这个地址即可。

之后把WordPress配置里的DB_HOST改成host.docker.internal:3306(或你的宿主机内网IP)。

额外检查项
  1. MySQL权限设置:确保你的MySQL用户(比如root)允许从WordPress容器的IP或任意地址连接,执行以下SQL修改权限:
    GRANT ALL PRIVILEGES ON wp_db.* TO 'root'@'%' IDENTIFIED BY 'root';
    FLUSH PRIVILEGES;
    
    注:%表示允许任意地址连接,生产环境建议限制为特定IP,此处仅作测试用。
  2. 防火墙/安全组:确认宿主机或容器的防火墙没有阻止3306端口的通信。
  3. WordPress配置文件:如果手动修改wp-config.php,检查DB_HOST、DB_USER、DB_PASSWORD、DB_NAME参数是否完全正确,无拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:02:19