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

cos*_*ari 5 database-migration symfony docker dockerfile docker-compose

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

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

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

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

我的应用程序将使用以下 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
Run Code Online (Sandbox Code Playgroud)

但是然后需要我手动运行迁移。

由于我不知道该怎么做,我想我会向 docker-compose.yml 添加另一个容器定义

build:
  context: .
  dockerfile: Dockerfile.migrations
volumes_from:
  - php
links:
  - database
  - php
depends_on:
  - database
  - php
Run Code Online (Sandbox Code Playgroud)

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

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" ]
Run Code Online (Sandbox Code Playgroud)

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

关于实现这一目标的正确/最佳方法的任何想法?