web-dev-qa-db-fra.com

Docker-compose avec Django n'a pas pu traduire le nom d'hôte "db" en adresse: nom ou service inconnu

J'ai actuellement un système construit avec docker-compose, il crée une application Django.

Jusqu'à présent, j'ai utilisé une base de données à l'intérieur d'un conteneur (postgresql) dans ma version de test. Maintenant, j'ai changé la base de données de ce conteneur en une instance RDS dans AWS.

En utilisant Pg_dump, j'ai recréé la base de données dans RDS et changé le settings.py, tout était censé être normal. J'ai accédé aux données de la base de données dans ma webapp sans aucun problème.

Tout allait bien jusqu'à ce que je doive faire une migration. Sans le conteneur de base de données, le conteneur Django me donne ce message:

Django.db.utils.OperationalError: impossible de traduire le nom d'hôte "db" en adresse: nom ou service inconnu

Mon fichier Docker-compose.yml avant les modifications:

 version: '2'

    services:
      db:
        image: postgres:9.5
        restart: always
        environment:
          POSTGRES_USER: testing
          POSTGRES_PASSWORD: tests
          POSTGRES_DB: test
        volumes:
          - /dbdata:/var/lib/postgresql/data
      Django:
        build: ./Django
        command: gunicorn contactto.wsgi:application -b 0.0.0.0:8000
        restart: always
        volumes:
          - ./Django:/usr/src/app
          - ./Django/static:/usr/src/app/contactto/static
        ports:
          - "8000:8000"
        depends_on:
          - db

Maintenant, après les changements:

    version: '2'

    services:
      Django:
        build: ./Django
        command: gunicorn contactto.wsgi:application -b 0.0.0.0:8000
        restart: always
        volumes:
          - ./Django:/usr/src/app
          - ./Django/static:/usr/src/app/contactto/static
        ports:
          - "8000:8000"

Et les BASES DE DONNÉES de settings.py. Avant:

DATABASES = {
        'default': {
            'ENGINE': 'tenant_schemas.postgresql_backend',
            'NAME': 'testing',
            'USER': 'test',
            'PASSWORD': 'test',
            'Host': 'db',
            'PORT': '5432',
        }
    }

Après:

DATABASES = {
        'default': {
            'ENGINE': 'tenant_schemas.postgresql_backend',
            'NAME': 'testing',
            'USER': 'test',
            'PASSWORD': 'test',
            'Host': 'xxx.rds.amazonaws.com',
            'PORT': '5432',
        }
    }

La chose étrange est que je peux utiliser la base de données aws dans mon application ... Je peux créer des utilisateurs et faire des choses à l'intérieur de la base de données et les changements apparaissent. Maintenant, dans l'interface CLI, je ne peux même pas utiliser le shell manage.py sans le message.

Je suis complètement perdu.

14
Matheus Campello

Répondant à ma question, c'était stupide ...

Mon manage.py ne sélectionnait que le fichier de paramètres base.py et ne tenait pas compte du fichier de paramètres staging.py. Donc, il se brisait dans la CLI et ne se brisait pas à l'intérieur de l'application.

2
Matheus Campello

Dans la partie "Django" de votre docker-compose.yml sous la section "depend_on", essayez d'ajouter links: - db:db Après cela, ou même remplacez le depend_on: db par cela.

Je parie que si vous avez tapé docker logs (container name) vous verriez qu'il est évidemment difficile de trouver où "db" pointe.

Je pense qu'ils cherchent à mettre fin à la prise en charge des liens dans docker-compose dans de nouvelles itérations au moins je l'ai lu quelque part ..

1
Octatron

Aux autres qui vivent cela.

La commande suivante (qui supprime tous les conteneurs, réseaux, images et éventuellement volumes inutilisés) résout mon problème:

docker system Prune

Voir document docker pour plus d'informations

0
Mik Goldwyn