私は現在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を使用することもできません。
私は完全に迷っています。
私の質問に答えると、これは愚かなものでした...
私のmanage.pyはbase.py設定ファイルのみを選択し、staging.py設定ファイルを考慮していませんでした。そのため、CLIで問題が発生し、アプリ内で問題が発生することはありませんでした。
Docker-compose.ymlの「depends_on」セクションの「Django」の部分に、その後に_links: - db:db
_を追加するか、depends_on:dbをそれで置き換えます。
docker logs (container name)
と入力した場合は、「db」が指している場所を特定するのに明らかに問題があることがわかります。
新しいイテレーションでdocker-composeのリンクのサポートを終了しようとしていると思います。
これを経験している他の人に。
次のコマンド(未使用のコンテナー、ネットワーク、イメージ、およびオプションでボリューム)をすべて削除すると、問題が解決します。
docker system Prune
詳細は docker document を参照してください