2017-01-11 1 views
3

Пожалуйста, несите меня. Довольно новый для Докера.Запустите команду миграции базы данных при развертывании контейнера Docker в AWS

Я устанавливаю контейнеры Докера (отдельно) в реестр AWS EC2 с использованием CodeDeploy. В развертывании, следующая команда выполняется после установки некоторых переменных окружения и т.д.:

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

Контейнер запускает файл, расположенный и маркированный в EC2 Container Service. На данный момент проблем нет.

Поскольку это 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

Я делаю это вручную. Но я думаю, что вы могли бы сделать «докер ps» в вашем сценарии развертывания и grep containerId, который вы бы применили к ... –

+1

Это смешивает два возможных решения. 'docker-compose run [service]' запустит новый контейнер докеров. Вы также можете использовать 'docker ps', чтобы узнать идентификатор контейнера работающего php-контейнера и использовать' docker exec [containerID] [migrationCommand] 'для запуска команды внутри запущенного контейнера вместо того, чтобы откручивать новую. – eawenden

0

Просто оставить это здесь для следующего один, который ищет это ... ;-)

При использовании последней версии o е Doctrine, существует довольно удобный параметр для этого:

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

«не позволит-не-миграции» параметр указывает учение не бросить исключение, когда нечего делать ...

Смежные вопросы