Docker-compose django-python容器通信

Docker-compose django-python container communication

所以我是 运行 一个 django 节点和一个使用 docker-compose 的常规 python 脚本。 python 脚本定期向 django 后端请求数据。但是,当我 docker-compose up 时出现此错误:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=8080): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f3d6e45dc10>: Failed to establish a new connection: [Errno 111] Connection refused'))

这是我的 docker-compose.yaml:

version: "3"
services:
  backend:
    command: >
      sh -c "python3 manage.py wait_for_db && 
             python3 manage.py migrate &&
             python3 manage.py runserver 0.0.0.0:8080"
    build:
      context: ./backend
      dockerfile: Dockerfile
    volumes:
      - ./backend:/backend
    ports:
      - "8080:8080"

  monitor:
    command: >
      sh -c "python3 main.py"
    build:
      context: ./monitor
      dockerfile: Dockerfile
    volumes:
      - ./monitor:/monitor
    ports:
      - "8082:8082"

来自 monitor 我是:

response = requests.get(url = 'http://0.0.0.0:8080/')

docker 中节点之间的正确通信方式是什么?

P.S django 中允许使用 Cors 来源

它无法连接,因为在监视器容器中,后端不在 0.0.0.0,而是在它创建的默认网络中由 docker 分配的地址。 而服务名就是容器ip的别名。 所以后端服务可以通过别名backend

访问

了解更多信息 here

让它发挥作用。将监控脚本更改为

requests.get(url = 'http://backend:8080')