[英]Python requests cannot resolve Docker-Compose services
我在單獨的存儲庫中有2 個 docker-compose設置。 當我運行它們時,我希望它們在同一個網絡上相互交談。 通過使用docker inspect
,這兩個應用程序都已啟動並運行並位於同一網絡上。
但是,當我嘗試使用 python requests
從nhec_ter_app
向vtn_app
發出請求時,它無法解決。
docker-compose.yml 1
version: '3.2'
services:
vtn_app: &app
tty: true
cap_add:
- SYS_PTRACE
build:
context: .
args:
requirements: requirements/development.txt
container_name: vtn
environment:
- DEBUG=False
- PYTHONUNBUFFERED=1
- TESTING_USER=oh_hey_there
- SQL_USER=postgres
- SQL_HOST=postgres
- SQL_PASSWORD=postgres
- SQL_DB=postgres
- SQL_PORT=5432
restart: always
volumes:
- .:/app:delegated
depends_on:
- postgres
ports:
- 8000:80
- 8080:8080
- 8081:8081
command: make adev
networks:
- nhec-ter_ter-web-net
postgres:
image: postgres:10
container_name: vtn_postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
ports:
- 5432:5432
networks:
- nhec-ter_ter-web-net
networks:
nhec-ter_ter-web-net:
external:
name: nhec-ter_ter-web-net
docker-compose.yml 2
version: "3.9"
services:
nhec_ter_app:
build: .
command: python manage.py runserver 0.0.0.0:8000
container_name: nhec_ter
environment:
- DEBUG=True
- PYTHONUNBUFFERED=1
- TER_BASIC_AUTH_USER=pricesAdmin
- TER_BASIC_AUTH_PASSWORD=Barry0325!
- CELERY_BROKER_URL=redis://broker:6379/0
- VTN_API_URL=http://vtn_app/
- VTN_API_TOKEN=NHEC_UTILITY
volumes:
- .:/code
ports:
- "9000:8000"
depends_on:
- db
- celery-worker
- broker
networks:
- nhec-ter_ter-web-net
nhec_ter_test:
build: .
command: python manage.py test
container_name: nhec_ter_test
environment:
- DEBUG=True
- PYTHONUNBUFFERED=1
volumes:
- .:/code
depends_on:
- db
db:
image: postgres:10
container_name: nhec_ter_postgres
ports:
- 6000:5432
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: nhec
POSTGRES_USER: nhec
POSTGRES_PASSWORD: nhec
networks:
- nhec-ter_ter-web-net
celery-worker:
build: .
command: celery -A nhec_ter worker -l DEBUG
depends_on:
- db
- broker
environment:
CELERY_BROKER_URL: redis://broker:6379/0
networks:
- nhec-ter_ter-web-net
broker:
image: redis:6-alpine
networks:
- nhec-ter_ter-web-net
networks:
nhec-ter_ter-web-net:
name: nhec-ter_ter-web-net
driver: bridge
volumes:
db_data: {}
My celery task hangs cause it can't make a request call to vtn_app
Here's what I've tried to do in my python manage.py shell
to illustrate - if I can get this to work like it does in our prod env (not dockerized ) 那么我知道這些任務會起作用。
python manage.py shell
:
>>> import requests
>>> resp = requests.get('http://vtn_app/')
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 72, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "/usr/local/lib/python3.8/socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 398, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/local/lib/python3.8/http/client.py", line 1256, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1302, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1251, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1011, in _send_output
self.send(msg)
File "/usr/local/lib/python3.8/http/client.py", line 951, in send
self.connect()
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fab9dded0a0>: Failed to establish a new connection: [Errno -2] Name or service not known
我解決了這個問題; 我正在使用aiohttp-devtools
並使用adev
在 docker 中運行此應用程序
這意味着服務器在開發端口上運行。
我能夠運行requests.get('http://vtn_app:8080/')
並從服務器收到正確的狀態代碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.