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

Docker容器间请求报错:Connection refused问题求助

问题排查与解决方案

核心问题

你在container_1里用http://127.0.0.1:8001请求认证服务,但容器内的127.0.0.1是容器自身的回环地址,并非宿主机,因此无法连接到宿主机映射8001端口的container_2。

解决步骤

1. 修改请求地址为容器名称

Docker同一网络下的容器可直接通过容器名互相访问,无需使用宿主机端口。将代码中的host修改为:

host = 'http://container_2:8000'

注意使用container_2的内部端口8000(而非宿主机映射的8001),容器间直接通信走内部暴露的端口。

2. 确认服务监听地址

检查container_2内的Django服务是否监听在0.0.0.0:8000(若仅监听127.0.0.1,容器外无法访问)。进入container_2执行:

netstat -tulpn | grep 8000

确保输出中的地址为0.0.0.0:8000或:::8000。

3. 验证容器间连通性

进入container_1内部,先测试与container_2的连通性:

docker exec -it container_1 ping container_2

若ping通,再用curl测试API接口:

curl http://container_2:8000/api/v1/auth/sign_in -X POST -d '{"your":"data"}' -H "Content-Type: application/json"

4. 修正Docker Compose配置缩进错误

你的container_2配置存在缩进问题,修正后如下:

container_2:
  build:
    context: ./container_2
    dockerfile: Dockerfile
  env_file: 'accounts/settings/.env'
  stdin_open: true 
  tty: true        
  environment:
    - 'DJANGO_SETTINGS_MODULE=project.settings'
  expose:
    - 8000
  ports:
    - "8001:8000"
  volumes:
    - ./data:/app
  networks:
    - web

缩进错误可能导致容器构建异常,修正后重启容器。

总结

最关键的修复点是避免在容器内用宿主机的127.0.0.1访问其他容器,改用Docker网络内的容器名+内部端口即可解决连接拒绝问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:55:16