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

