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')
所以我是 运行 一个 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')