运行python manage.py test时收到以下错误
django.db.utils.OperationalError:无法将主机名“db”转换为地址:提供的nodename或servname,或者未知
我的docker-compose.yml看起来像这样:
catch
我的dockerfile看起来像
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
web:
entrypoint: /entrypoint.sh
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
请告诉我有关如何解决此问题的任何见解。
答案 0 :(得分:0)
这是因为他们不在同一个网络中,
您应该创建一个网络并在其中包含db和web,
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
networks:
- backend
web:
entrypoint: /entrypoint.sh
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
networks:
- backend
networks:
backend:
driver: bridge
答案 1 :(得分:0)
请注意不要暴露数据库的端口。
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: <password>
POSTGRES_USER: postgres
networks:
- backend
现在,在Django settings.py中,您可以使用db
作为主机名,而不是localhost。
DATABASES = {'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': '<password>',
'HOST': 'db',
'PORT': '5432',
}}
您的web
服务保持不变,因为该服务需要绑定到您的localhost:8000
的容器的端口8000