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

树莓派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端口无服务,因此连接被拒绝。

解决方案

  1. 修正网络别名冲突
    移除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行
  1. 重启容器生效配置
    执行命令重启所有容器,确保新的网络配置生效:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:56:20