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

Docker中两个独立WordPress容器仅一个可用,另一个数据库连接失败求助

问题描述

在两个独立文件夹中部署两个WordPress Docker站点,第一个容器运行正常,但第二个容器提示Error establishing a database connection错误。两个容器的docker-compose.yml配置如下:

容器1配置

services:
  db:
    platform: linux/x86_64
    image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password    
  wordpress:
    image: wordpress:latest
    ports:
      - 8084:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
    volumes: 
      - ./html:/var/www/html 
volumes:
  db_data: {}

容器2配置

services:
  db:
    platform: linux/x86_64
    image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress2
      - MYSQL_USER=wordpress2
      - MYSQL_PASSWORD=wordpress2
    expose:
      - 3306
      - 33060
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8081:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password    
  wordpress:
    image: wordpress:latest
    ports:
      - 8085:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress2
      - WORDPRESS_DB_PASSWORD=wordpress2
      - WORDPRESS_DB_NAME=wordpress2
    volumes: 
      - ./html:/var/www/html 
volumes:
  db_data: {}

排查与解决思路

  • 解决卷冲突问题:Docker命名卷是全局资源,两个容器都使用db_data会导致第二个容器复用第一个的数据库卷。将第二个容器的卷名修改为db_data2,同时对应更新db服务的volumes配置:

    # 容器2的db服务段
    volumes:
      - db_data2:/var/lib/mysql
    # 容器2的volumes段
    volumes:
      db_data2: {}
    
  • 检查数据库服务状态:查看第二个容器的db服务日志,确认启动是否正常:

    docker-compose logs db
    

    执行docker-compose ps db确认服务状态为Up,如果存在初始化错误(如权限问题、端口占用),根据日志提示修复。

  • 核对环境变量一致性:再次确认第二个容器中WordPress的WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD、WORDPRESS_DB_NAME,是否与db服务的MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE完全匹配,注意拼写和大小写细节。

  • 测试容器内网络连通性:进入第二个容器的WordPress容器,直接测试数据库连接:

    docker-compose exec wordpress bash
    apt update && apt install -y mysql-client
    mysql -h db -u wordpress2 -pwordpress2 wordpress2
    

    若连接失败,说明网络配置或数据库服务存在问题。

  • 通过phpMyAdmin验证数据库可用性:访问第二个容器的phpMyAdmin(http://localhost:8081),使用root密码somewordpress登录,查看是否存在wordpress2数据库。如果phpMyAdmin也无法连接,优先排查db服务问题;如果能连接,再检查WordPress容器的配置。

内容的提问来源于stack exchange,提问作者Jaime Gómez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:35:33