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

Php 将Docker容器部署到AWS时运行数据库迁移命令,php,symfony,docker,amazon-ec2,doctrine-migrations,Php,Symfony,Docker,Amazon Ec2,Doctrine Migrations,请容忍我。对Docker来说是个新手 我正在使用部署Docker容器(分离)到AWS EC2注册表。在部署时,在设置一些环境变量等后运行以下命令: exec docker run -d ${PORTS} -v cache-${CACHE_VOLUME} --env-file $(dirname $0)/docker.env --tty "${IMAGE}:${TAG}" 容器运行在EC2容器服务中定位并标记的图像。到目前为止没有问题 由于这是一个PHP应用程序(特别是Symfony2应用程序)

请容忍我。对Docker来说是个新手

我正在使用部署Docker容器(分离)到AWS EC2注册表。在部署时,在设置一些环境变量等后运行以下命令:

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 run…”期间是否有任何方法可以运行此命令,同时保持容器运行,或者是否需要专门为此命令运行另一个容器

非常感谢

您需要创建。此脚本在容器启动时运行

entrypoint.sh文件:

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

# start apache
apache2-foreground
#创建或更新数据库
/waitforit.sh:-t30
php应用程序/控制台原则:迁移:执行
#启动apache
apache2前景酒店
它是启动数据库时等待的脚本

我执行以下操作:

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

只是把这个留在这里,让下一个搜索这个…;-)

当使用最新版本的条令时,有一个非常方便的参数:

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

“allow no migration”参数指示条令在无事可做时不要抛出异常…

但是部署脚本如何知道[containerId]?或者你是手动运行的?我是手动运行的。但我认为你可以在你的部署脚本中使用“docker ps”,并对你将要应用的集装箱进行grep…这将混合两种可能的解决方案<代码>docker compose运行[服务]将启动一个新的docker容器。您还可以使用
docker ps
查找正在运行的php容器的容器id,并使用
docker exec[containerID][migrationCommand]
在正在运行的容器中运行该命令,而不是旋转一个新的容器。@mr.void但您不能使用Swarm Mode。谢谢,这正是我所需要的。