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 решило проблему.