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

Docker容器化全栈应用遇连接拒绝:前后端通信及端口访问问题

问题原因及修复方案

核心问题分析

出现urllib.error.URLError: <urlopen error [Errno 111] Connection refused>和前端无法访问的问题,主要源于两个关键配置错误:

1. 后端地址配置错误

前端代码里的jokeProviderUrl = "http://127.0.0.1:8080"不符合Docker网络逻辑。在容器环境中,每个容器都是独立的网络实例,127.0.0.1指向的是前端容器自身,而非宿主机或后端容器。Docker Compose会自动为所有服务创建专属网络,服务之间必须通过服务名称互相访问。

2. 前端端口映射不匹配

docker-compose.yml中前端的端口映射是"8081:80",但你的Python应用(app.py)大概率没有监听容器内的80端口。比如常见的Python Web框架(如Flask)默认监听5000端口,且如果应用仅绑定127.0.0.1,容器外部也无法访问。


具体修复步骤

步骤1:修正前端的后端访问地址

修改app.py中的地址为:

jokeProviderUrl = "http://backend:8080"

这里的backend是docker-compose.yml中定义的后端服务名称,Docker会自动将其解析为后端容器的IP地址,端口使用容器内部的8080(无需用宿主机映射的8080)。

步骤2:修正前端端口映射

  1. 先确认app.py中Web服务的监听配置,比如Flask应用需要调整为:
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000) # 绑定0.0.0.0允许外部访问,端口可根据实际需求修改
  1. 同步修改docker-compose.yml中前端的ports配置,对应应用监听的端口:
frontend: 
  build: M347_LB02_JokeConsumerPython/.
  ports:
    - "8081:5000" # 这里的5000对应app.py中设置的监听端口

步骤3:(可选)确保后端就绪后再启动前端

后端Spring Boot服务启动速度可能慢于前端Python应用,导致前端启动时后端未就绪,也会触发连接拒绝。可以在docker-compose.yml中添加健康检查和依赖配置:

services:
  backend:
    build: M347_LB02_JokeProviderJava/.
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] # 需确保Spring Boot启用了actuator组件
      interval: 5s
      timeout: 5s
      retries: 5
  frontend: 
    build: M347_LB02_JokeConsumerPython/.
    ports:
      - "8081:5000"
    depends_on:
      backend:
        condition: service_healthy

内容的提问来源于stack exchange,提问作者the_dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:40:08