Docker-compose django-python взаимодействие контейнеров
Итак, я запускаю узел django и обычный скрипт python с помощью docker-compose. Скрипт 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 Cors origins разрешены в django
Он не может подключиться, потому что из контейнера монитора бэкенд находится не по адресу 0.0.0.0, а по адресу, назначенному docker в созданной им сети по умолчанию.
А имя сервиса является псевдонимом для ip контейнера.
Таким образом, доступ к сервису backend можно получить через псевдоним backend
Читайте подробнее об этом здесь.
Чтобы заставить его работать. Измените скрипт монитора на
requests.get(url = 'http://backend:8080')