在Dockerfile中运行一个命令__after__启动一个链接的容器

我希望在链接的容器启动在容器中运行一个命令。

比方说,我想运行php app/console doctrine:schema:create (或任何其他应用程序用于预先填充我的数据库架构…不一定PHP / symfony但没有像一个SQL脚本,可以在运行数据库容器)尽快build立我的容器,但很明显在数据库容器已build成和应用程序卷已被挂载。

初始化脚本是:

  • 复杂 – >所以我需要比简单的SQL或bash脚本更复杂的东西的支持
  • 慢 – >所以它只需要运行一次容器安装

这是我docker-compose.yml

 application: build: code volumes: - ./symfony:/var/www/symfony - ./logs/symfony:/var/www/symfony/app/logs tty: true db: image: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: root MYSQL_USER: root MYSQL_PASSWORD: longtake php: build: php-fpm expose: - 9000:9000 volumes_from: - application links: - db nginx: build: nginx ports: - 80:80 links: - php volumes_from: - application volumes: - ./logs/nginx/:/var/log/nginx 

相关的Dockerfile是php-fpm / Dockerfile,可能是这样的:

 FROM debian:jessie RUN apt-get update && apt-get upgrade && apt-get install -y php5-common php5-cli php5-fpm php5-mcrypt php5-mysql php5-apcu php5-gd php5-imagick php5-curl php5-intl # This should be executed after the application volume is ready RUN cd /var/www/symfony && php app/console doctrine:schema:create ADD symfony.ini /etc/php5/fpm/conf.d/ ADD symfony.ini /etc/php5/cli/conf.d/ ADD symfony.pool.conf /etc/php5/fpm/pool.d/ RUN usermod -u 1000 www-data CMD ["php5-fpm", "-F"] EXPOSE 9000 

docker-compose build返回

 Step 4 : RUN cd /var/www/symfony && php app/console doctrine:schema:create ---> Running in 629ab2771cb3 /bin/sh: 1: cd: can't cd to /var/www/symfony Service 'php' failed to build: The command '/bin/sh -c cd /var/www/symfony && php app/console doctrine:schema:create' returned a non-zero code: 2 

您不能在容器运行时运行命令。 RUN时,您创build图像。

您可以创build一个小的启动脚本,创build模式,然后启动PHP并将其放入CMD

或者您可以专门创build一个小图像来创build模式。 你运行容器,它创build模式,然后退出。

我相信你也可以把它写出来,但是我不太了解它来发布代码。