在AWS EC2 Ubuntu实例上用Docker-Compose运行WordPress与MySQL容器报错
Docker Compose部署WordPress访问报错问题
我是Docker Compose新手,已经创建了如下docker-compose.yaml文件,但访问WordPress站点时出现报错。我在AWS EC2 Ubuntu实例上操作,使用http://<IP-ADDRESS>:8090访问站点。
报错截图:
我的docker-compose.yaml文件内容:
version: "3.3" services: wordpress: image: wordpress ports: - "8090:80" depends_on: - mysql environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: "password" WORDPRESS_DB_NAME: wordpress networks: net: ipv4_address: "172.31.32.20" mysql: image: "mysql:5.7" environment: MYSQL_DATABASE: wordpress MYSQL_ROOT_PASSWORD: "password" volumes: - ./mysql:/var/lib/mysql networks: net: ipv4_address: "172.31.32.21" networks: net: ipam: driver: default config: - subnet: "172.31.32.0/20"
解决步骤
1. 确认MySQL服务是否就绪
depends_on仅保证容器启动顺序,不确保MySQL服务完全初始化完成。先查看MySQL容器日志:
docker-compose logs mysql
如果日志中没有ready for connections字样,说明MySQL启动失败。大概率是本地./mysql目录权限问题,删除该目录(记得备份数据)后重新创建容器:
rm -rf ./mysql docker-compose up -d --force-recreate
2. 修复自定义网络冲突
你指定的子网172.31.32.0/20和AWS EC2默认内网子网(172.31.0.0/16)重叠,会导致容器间网络不通。直接去掉固定IP和自定义子网配置,让Docker自动分配网络:
修改后的docker-compose.yaml:
version: "3.3" services: wordpress: image: wordpress ports: - "8090:80" depends_on: - mysql environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: "password" WORDPRESS_DB_NAME: wordpress networks: - net mysql: image: "mysql:5.7" environment: MYSQL_DATABASE: wordpress MYSQL_ROOT_PASSWORD: "password" volumes: - ./mysql:/var/lib/mysql networks: - net networks: net:
3. 检查EC2安全组配置
确保EC2实例的安全组已开放8090端口的入站规则,测试阶段可暂时将来源设为0.0.0.0/0,生产环境需限制为特定IP。
4. 验证容器间连通性
进入WordPress容器,测试能否访问MySQL:
docker-compose exec wordpress ping mysql
能ping通则网络正常;若不通,用修改后的配置重新启动容器。
5. 查看WordPress日志排查
若以上步骤无问题,查看WordPress容器日志定位具体错误:
docker-compose logs wordpress
重点检查数据库连接相关报错,确认环境变量中的用户名、密码与MySQL配置一致。
内容的提问来源于stack exchange,提问作者Rishith kumar
相关产品推荐
相关产品推荐

