如何通过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:验证通信是否正常
- 启动所有容器:
docker-compose up --build
- 可以进入容器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
相关产品推荐
相关产品推荐

