Docker Compose ファイルを使用する場合、特定のコマンドを 1 回だけ実行する必要がある場合があり、多くの場合、初期セットアップ中に実行されます。アプリケーションの。この要件は、アプリケーションが初期化が必要なデータベースに依存しており、初期化は最初の実行時にのみ行われる必要がある場合に発生します。
この場合、ユーザーはコマンド ./my-project - を実行する予定です。必要な情報をデータベースに追加するためのセットアップを行います。これを実現するには、コンテナにエントリポイント スクリプトを組み込むことをお勧めします。
エントリポイント スクリプトは、メイン アプリケーションを開始する前にカスタム コマンドを実行するメカニズムを提供します。エントリポイント スクリプト内で、データベースがすでに初期化されているかどうかを確認できます。初期化が必要な場合、スクリプトはセットアップ手順を実行できます。
このアプローチにより、コンテナーが再起動されたりサービスがスケールアップされた場合でも、初期化コマンドは 1 回だけ実行されます。
このソリューションを実装するには、docker-compose.yml ファイルを変更して、my_project サービスに次のスクリプトを含めます。定義:
services: my_project: build: . volumes: - data:/app ports: - "6060:8080" depends_on: - mongo entrypoint: ["/app/entrypoint.sh"]
この場合、データはアプリケーション コードを含むボリュームで、entrypoint.sh はエントリポイント スクリプトです。
次の内容を含むentrypoint.shスクリプトを作成します:
#!/bin/bash # Check if database is initialized. mongo mongo://admin:admin@mongo:27017/my_project --eval "db.user.findOne()" > /dev/null 2>&1 # If the database is not initialized, perform setup. if [ $? -ne 0 ]; then /app/my_project -setup fi # Start the application. /app/my_project
このスクリプトでは、mongo は Mongo コンテナーのホスト名、my_project はデータベース名です。
このスクリプトは、特定のドキュメントが Mongo コンテナーのユーザー コレクションに存在するかどうかを確認します。データベース。ドキュメントが存在しない場合は、データベースが初期化されていないことを示し、setup コマンドが実行されます。それ以外の場合、アプリケーションは正常に起動します。
ユーザーは最初、データベース ボリュームをマウントするために「データ専用コンテナ」を使用したことに注意してください。ただし、名前付きボリュームをサポートする Docker 1.9 以降では、このアプローチは必要なくなりました。したがって、mongodata コンテナーを docker-compose.yml ファイルから削除し、指定されたボリュームを直接使用するように mongo サービスを変更できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3