将Docker容器部署到AWS时运行数据库迁移命令

请多多包涵。 对Docker来说很新颖。

我使用CodeDeploy将Docker容器(分离)部署到AWS EC2registry。 在部署时,在设置一些环境variables之后运行以下命令:

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

容器在EC2容器服务中运行定位和标记的图像。 到目前为止没有问题。

由于这是一个PHP应用程序(特别是一个Symfony2应用程序),我通常需要发出以下命令来执行部署的数据库迁移:

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

现在,是否有任何运行此命令在“docker运行…”,而保持容器运行,还是我需要运行另一个容器专门为这个命令?

非常感谢!

您需要创build入口点 。 这是脚本运行在容器启动。

entrypoint.sh文件:

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

等待它是数据库启动时等待的脚本

我做如下:

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

只是把这里留下来寻找下一个… 😉

当使用最近版本的教条,有一个非常方便的参数:

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

“allow-no-migration”参数指示教义不要抛出exception,当没有任何事情做…