2015-11-13 65 views
3

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

比方说,我想运行php app/console doctrine:schema:create(或使用预填充我的数据库架构......不一定PHP/symfony的,但没有作为可数据库容器能运行一个SQL脚本简单的任何其他应用程序)尽快建立了我的容器,但显然之后数据库容器已经建好并且已经安装了应用程序卷。

初始化脚本:

  • 复杂 - >所以我需要的东西比简单的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 
+0

你应该看看官方docker wordpress和它使用的入口点脚本。 – mgor

回答

1

你可以在容器运行时不RUN的命令。 RUN在您创建图像时起作用。

您可以创建一个小的启动脚本,它创建该模式,然后启动php并将其放入CMD

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

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

相关问题