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

Docker Compose容器间通信连接被拒绝问题求助

问题

我有两个通过Docker Compose管理的容器,需要实现容器间通信(从action容器向logic容器发送数据)。

以下是docker-compose.yml配置:

version: '3.4'
services:
  logic:
    build:
      context: ./logic
      dockerfile: Dockerfile
    ports:
      - 5000:5000
  action:
    build:
      context: ./
      dockerfile: Dockerfile
    env_file: 
      - .env
    ports:
      - 7071:7071

logic容器的Dockerfile配置如下:

FROM python:3.8

WORKDIR /app

COPY . /app

RUN pip install --trusted-host pypi.python.org -r requirements.txt

EXPOSE 5000

CMD ["python", "app.py"]

按照Docker Compose网络规则,从action容器访问logic容器应使用http://logic:5000地址,但执行curl命令时出现连接被拒绝错误:

root@99e671f7e3d9:/app# curl -X POST -d "key1=value1&key2=value2" http://logic:5000

返回错误:

curl: (7) Failed to connect to logic port 5000: Connection refused

查看logic容器的端口监听情况,netstat显示服务确实在监听5000端口,但只绑定了回环地址:

root@93edd7abe469:/app# netstat -tuln | grep 5000 

tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN

尝试通过logic容器的IP访问也无法连接,请问问题出在哪里?

解决方法
  • 问题根源:logic容器内的服务仅监听了127.0.0.1:5000(本地回环地址),这个地址只能被容器自身访问,同一Docker网络内的action容器无法通过该地址建立连接。
  • 修复操作:修改logic容器中的app.py,将服务的监听地址改为0.0.0.0(允许接收来自任意网络接口的请求)。以Flask应用为例,修改启动代码:
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

其他Web框架(如FastAPI、Django)需对应调整绑定地址为0.0.0.0,确保服务能接收Docker网络内其他容器的请求。

  • 重启容器:重新构建并启动容器使修改生效:
docker-compose down
docker-compose up --build

完成以上步骤后,从action容器访问http://logic:5000即可正常通信。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:15:20