在Docker容器启动时运行Symfony数据库迁移脚本

希望问题标题不要太混乱。

基本上我有一个基于Docker的Symfony 3应用程序。

我想要在Docker启动时运行应用程序的数据库迁移。 基本上这样我就可以通过运行“docker-compose up”来使应用程序启动并运行fixture数据。

但是,如果你的所有容器都来自图像呢?

我的应用程序将运行以下docker-compose.yml

version: '2' services: nginx: image: nginx:latest container_name: symfony_nginx ports: - "80:80" volumes_from: - php volumes: - ./etc/build/dev/nginx/conf.d:/etc/nginx/conf.d - ./var/logs/nginx:/var/log/nginx php: image: letsbonus/php-dev:7.0 container_name: symfony_php volumes: - ./:/app ports: - "2222:22" working_dir: /app redis: image: redis:3.0.7-alpine container_name: symfony_redis elk: image: willdurand/elk container_name: symfony_elk ports: - "81:80" volumes: - ./etc/build/dev/elk/logstash:/etc/logstash - ./etc/build/dev/elk/logstash/patterns:/opt/logstash/patterns volumes_from: - php database: container_name: symfony_mysql image: mysql command: --general-log=/var/log/mysql/general.log environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=symfony ports: - 3306:3306 

但是,然后会要求我手动运行迁移。

因为我不知道如何去做,所以我想我将另一个容器定义添加到docker-compose.yml

 build: context: . dockerfile: Dockerfile.migrations volumes_from: - php links: - database - php depends_on: - database - php 

然而,自定义dockerfile开始增长arm和腿,如下所示。

 FROM ubuntu:16.04 RUN apt-get update RUN apt-get install -y sudo RUN apt-get install -y apt-transport-https RUN apt-get install -y php7.0 php-xml php7.0-mysql RUN apt-get install -y mysql-server-core-5.7 mysql-client-5.7 WORKDIR /app COPY opt/deployment/development/run.sh /usr/bin ENTRYPOINT [ "/usr/bin/run.sh" ] 

这一切似乎只是运行一个shell脚本,这让我认为我错过了一些东西,做错了。

任何想法正确/最好的方式来实现这一目标?