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

如何通过Python Requests实现Docker容器间通信?

容器A通过Python Requests与容器B通信的实现方案

没问题,基于你给出的Docker Compose配置和Bottle服务代码,我来一步步教你实现容器A到容器B的通信:

核心原理:Docker自定义网络的服务发现

你已经配置了自定义的my_network桥接网络,Docker Compose会自动为这个网络里的容器提供服务名解析功能——也就是说,容器A可以直接用docker-compose里定义的服务名(也就是B)来访问容器B,不需要知道它的具体IP地址。

步骤1:确保容器A安装了Requests库

首先,容器A的Python环境需要有requests包才能发起HTTP请求。你需要在./docker_A目录下的Dockerfile里添加安装命令:

# 假设你的基础镜像是Python,比如python:3.9-slim
FROM python:3.9-slim

# 安装requests库
RUN pip install --no-cache-dir requests

# 其他镜像构建命令...
COPY . /app
WORKDIR /app
CMD ["python", "your_app.py"]

步骤2:在容器A中编写Requests调用代码

在容器A的Python代码里,直接用服务名B作为域名,加上容器B内部的端口8070(注意不是宿主机映射的8070,容器间通信直接用容器内部端口)来发起请求:

import requests

try:
    # 直接通过服务名访问容器B的Bottle服务
    response = requests.get("http://B:8070/")
    response.raise_for_status()  # 捕获HTTP错误
    result = response.json()
    print("容器B返回结果:", result)  # 输出: {'say': 'Hello world'}
except requests.exceptions.RequestException as e:
    print("请求失败:", str(e))

步骤3:验证通信是否正常

  1. 启动所有容器:
docker-compose up --build
  1. 可以进入容器A的终端测试代码:
docker-compose exec A python -c "import requests; print(requests.get('http://B:8070/').json())"

如果返回{'say': 'Hello world'},就说明通信成功了!

关键注意事项

  • 确保两个容器都在同一个自定义网络my_network里(你的docker-compose已经配置好了,这点没问题)
  • 容器B的Bottle服务必须绑定0.0.0.0(你已经写了run(host='0.0.0.0', port=8070),这样才能被其他容器访问,不能只绑定127.0.0.1)
  • 服务名必须和docker-compose.yml里services下的名称完全一致(这里是B,大小写敏感)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:40:06