web-dev-qa-db-ja.com

DockerコンテナをAWSにデプロイするときに、データベース移行コマンドを実行します

我慢してください。 Dockerはかなり新しいです。

CodeDeploy を使用してDockerコンテナ(デタッチ)をAWSEC2レジストリにデプロイしています。デプロイ時に、いくつかの環境変数などを設定した後、次のコマンドが実行されます。

exec docker run -d ${PORTS} -v cache-${CACHE_VOLUME} --env-file $(dirname $0)/docker.env --tty "${IMAGE}:${TAG}"

コンテナは、EC2 ContainerServiceに配置されタグ付けされたイメージを実行します。今のところ問題ありません。

これはPHPアプリケーション(具体的にはSymfony2アプリケーション)であるため、展開時にデータベースの移行を実行するには、通常、次のコマンドを発行する必要があります。

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

さて、コンテナを実行したまま「docker run ...」中にこのコマンドを実行するものはありますか、それともこのコマンド専用に別のコンテナを実行する必要がありますか?

どうもありがとう!

11
frigg

作成する必要があります エントリポイント 。このスクリプトは、コンテナーの起動時に実行されます。

entrypoint.shファイル:

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

# start Apache
apache2-foreground

待つ データベースの起動時に待機するスクリプトです

11
Bukharov Sergey

これを検索する次の人のためにここに置いておくだけです... ;-)

Doctrineの最新バージョンを使用する場合、これには非常に便利なパラメーターがあります。

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

「allow-no-migration」パラメーターは、doctrine何もすることがない場合、例外をスローしないように指示します。

2
Alex Regenbogen

私は次のようにします:

docker-compose exec [containerID] ./app/console migrations:migrate --no-interaction
1
enno.void