web-dev-qa-db-ja.com

Djangoを使用したDocker-composeはホスト名「db」をアドレスに変換できませんでした:名前またはサービスが不明です

私は現在docker-composeで構築されたシステムを持っています、それはDjangoアプリケーションを作成します。

これまで、テストビルドではコンテナー(postgresql)内のデータベースを使用していました。これで、データベースをこのコンテナからAWSのRDSインスタンスに変更しました。

Pg_dumpを使用して、RDS内でデータベースを再作成し、settings.pyを変更しました。 Webアプリケーション内のデータベースからデータに問題なくアクセスしました。

移行を行わなければならないまで、すべてが大丈夫でした。データベースコンテナがない場合、Djangoコンテナは次のメッセージを表示します。

Django.db.utils.OperationalError:ホスト名「db」をアドレスに変換できませんでした:名前またはサービスが不明です

変更前の私のDocker-compose.ymlファイル:

 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

変更後:

    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"

そして、settings.pyからのデータベース。前:

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

後:

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

奇妙なことに、アプリ内でawsデータベースを使用できます...ユーザーを作成してデータベース内で処理を行うと、変更が表示されます。現在、CLIでは、メッセージなしでmanage.py Shellを使用することもできません。

私は完全に迷っています。

14

私の質問に答えると、これは愚かなものでした...

私のmanage.pyはbase.py設定ファイルのみを選択し、staging.py設定ファイルを考慮していませんでした。そのため、CLIで問題が発生し、アプリ内で問題が発生することはありませんでした。

2

Docker-compose.ymlの「depends_on」セクションの「Django」の部分に、その後に_links: - db:db_を追加するか、depends_on:dbをそれで置き換えます。

docker logs (container name)と入力した場合は、「db」が指している場所を特定するのに明らかに問題があることがわかります。

新しいイテレーションでdocker-composeのリンクのサポートを終了しようとしていると思います。

1
Octatron

これを経験している他の人に。

次のコマンド(未使用のコンテナー、ネットワーク、イメージ、およびオプションでボリューム)をすべて削除すると、問題が解決します。

docker system Prune

詳細は docker document を参照してください

0
Mik Goldwyn