树莓派Docker部署网站遇Nginx连接拒绝错误求助
解决Docker容器间Nginx连接拒绝(111: Connection refused)问题
问题核心分析
从Nginx错误日志可见,请求被错误转发到db容器的IP(172.24.0.2)的80端口,但你的Nginx配置明确是proxy_pass http://wordpress:80/——根源在于Docker Compose中db和wordpress服务共用了同一个网络别名wordpress,导致DNS解析混乱:Nginx把wordpress域名指向了MySQL容器,而MySQL仅监听3306端口,80端口无服务,因此连接被拒绝。
解决方案
- 修正网络别名冲突
移除db服务中的wordpress别名,让该别名仅归属WordPress容器。修改后的db服务配置如下:
db: build: ./db container_name: db ports: - "3306:3306" volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: password networks: website_network: aliases: - db # 改为db别名,或直接删除aliases行
- 重启容器生效配置
执行命令重启所有容器,确保新的网络配置生效:
docker-compose down && docker-compose up -d
新手排查验证步骤
若问题仍存在,可按以下步骤逐一验证:
- 检查DNS解析正确性:进入Nginx容器,执行
nslookup wordpress,确认返回IP为WordPress容器的IP(而非db容器)。docker exec -it nginx bash # 容器内无nslookup时先安装:apt update && apt install dnsutils nslookup wordpress - 确认WordPress容器状态:用
docker-compose ps查看容器是否处于Up状态,进入容器后检查80端口是否被监听:docker exec -it wordpress bash netstat -tulpn | grep 80 - 简化代理配置:Docker Compose默认会为每个服务创建DNS记录,无需依赖别名,直接使用服务名
wordpress即可,确保proxy_pass地址为http://wordpress:80/。
内容的提问来源于stack exchange,提问作者Brian DiMarco
相关产品推荐
相关产品推荐

