2017-01-11 5 views
3

私にご負担ください。 Dockerの新機能DockerコンテナをAWSにデプロイするときにデータベース移行コマンドを実行

私はCodeDeployを使用してAWS EC2レジストリにDockerコンテナ(デタッチ)を展開しています。デプロイ時に、環境変数などを設定した後、次のコマンドが実行されます。コンテナは、EC2コンテナサービスに配置され、タグ付けされたイメージを実行します。これまでのところ問題はありません。

これは私が正常に展開上のデータベースの移行を実行するには、次のコマンドを発行する必要がありますPHPアプリケーション(特にSymfony2のアプリケーション)であるので:

php app/console doctrine:migrations:migrate --no-interaction 

、中にこのコマンドを実行するために、任意の」がありますdocker run ... "を実行するか、このコマンド用に別のコンテナを実行する必要がありますか?

多くの感謝!

答えて

3

entrypointを作成する必要があります。コンテナの起動時にスクリプトが実行されます。

entrypoint.shファイル:

#create or update db 
./waitforit.sh <DB_HOST>:<DP_PORT> -t 30 
php app/console doctrine:migrations:execute 

# start apache 
apache2-foreground 

wait for itそれはスクリプトで、データベースが

1

起動時に次のように私は待っていた:

ただ、次のためにここにこれを残し
docker-compose exec [containerID] ./app/console migrations:migrate --no-interaction 
+0

しかし、どのようにデプロイメントスクリプトは[containerId]を知ることができますか?または手動で実行していますか? – frigg

+1

私はそれを手動で行います。しかし、私はあなたの展開スクリプトで "docker ps"を実行して、あなたに適用するcontainerIdをgrepすることができると思います... –

+1

これは、2つの可能なソリューションを組み合わせています。 'docker-compose run [service]'は新しいドッカーコンテナを回転させます。また、 'docker ps'を使って実行中のPHPコンテナのコンテナIDを調べ、' docker exec [containerID] [migrationCommand] 'を使って、新しいコンテナをスピンアップするのではなく、実行中のコンテナ内でコマンドを実行することもできます。 – eawenden

0

をこれを検索する人... ;-)

最近のバージョンo F教義は、このためにかなり便利なパラメータがあります:

php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration 

「許可しない-NO-マイグレーション」パラメータは何の関係も存在しない場合には、例外をスローしない教義を指示...