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

Docker容器间请求失败:Python无法访问Express服务(端口5000)

解决Docker容器间无法通过localhost通信的问题

你遇到的核心问题是:每个Docker容器都有独立的网络命名空间,容器内的localhost或127.0.0.1指向容器自身,而非宿主机或其他容器。所以Python容器里请求localhost:5000只会访问自己的5000端口,自然找不到JS服务。

下面是两种可行的解决方案:

方案一:手动创建Docker网络(适合单容器启动场景)

  1. 创建一个自定义桥接网络
docker network create app-network
  1. 启动JS服务容器时,加入该网络并指定容器名
# 替换为你的JS镜像名称
docker run --name js-service --network app-network -d js-express-service
  1. 启动Python容器时,同样加入这个网络
# 替换为你的Python镜像名称
docker run --network app-network -d python-request-service
  1. 修改Python代码中的请求地址:把localhost:5000改成http://js-service:5000。Docker会自动在自定义网络中解析容器名到对应的IP地址。

方案二:使用Docker Compose(推荐,适合多容器管理)

用Docker Compose可以更便捷地管理多个容器,自动创建共享网络。

  1. 在项目根目录创建docker-compose.yml文件:
version: '3.8'
services:
  js-service:
    build: ./js-service-dir  # 替换为你的JS服务代码目录路径
    # 可选:映射宿主机端口5000到容器5000,方便宿主机测试访问
    ports:
      - "5000:5000"
  python-service:
    build: ./python-service-dir  # 替换为你的Python服务代码目录路径
  1. 启动所有容器:
docker-compose up -d
  1. 修改Python代码的请求地址为http://js-service:5000。Compose会自动为服务创建共享网络,服务名(js-service)可直接作为域名解析。

关键检查点

确保你的Express服务监听的是0.0.0.0而非127.0.0.1。如果JS代码里是默认写法:

app.listen(5000, () => { ... })

可能只监听容器内部的127.0.0.1,需要改成:

app.listen(5000, '0.0.0.0', () => {
  console.log('服务运行在0.0.0.0:5000');
});

这样容器外(包括其他容器)才能访问到该服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:35:23