Django не может разрешить имя службы db
У меня есть докеризованное приложение django и сервер postgresql. Я использую docker compose для объединения обоих. Проблема в том, что я постоянно получаю эту ошибку:
web_1 | django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known
Это мой файл docker-compose.yml
:
version: '3'
services:
web:
image: "badger-dev"
ports:
- "8000:8000"
volumes:
- .:/app
links:
- db:db
depends_on:
- db
db:
image: "badger-postgres"
container_name: db
ports:
- "5432:5432"
Я также попробовал следующую конфигурацию с тем же результатом:
version: '2'
services:
web:
image: "badger-dev"
ports:
- "8000:8000"
volumes:
- .:/app
links:
- db:db
networks:
- djangonetwork
db:
image: "badger-postgres"
container_name: db
ports:
- "5432:5432"
networks:
- djangonetwork
networks:
djangonetwork:
driver: bridge
Вот мои настройки:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'dbhvu01u3e3fug',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': '5432', # Use PgPool
}
}
Есть идеи, почему это не работает? Я также пробовал добавить depends_on, но тоже с тем же результатом. Я использую pycharm, если это может помочь.
Попробуйте это:
version: '2'
services:
db:
image: "badger-postgres"
container_name: db
ports:
- "5432:5432"
networks:
- djangonetwork
web:
image: "badger-dev"
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
links:
- db:db
networks:
- djangonetwork
networks:
djangonetwork:
driver: bridge
В итоге мой контейнер db завершал работу после выполнения команды postgres start. Добавление в Dockerfile чего-то вроде CMD service postgresql start && tail -f /dev/null
решило проблему.