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

时间:2015-11-13 22:49:32

标签: docker docker-compose

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

让我们说我想运行php app/console doctrine:schema:create(或任何其他用于预先填充我的数据库架构的应用程序......不一定是php / symfony,但没有像sql脚本那样简单,可以是一旦我的容器被构建,就在数据库容器中运行,但显然 之后构建了数据库容器并且已经安装了应用程序卷。

init脚本是:

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

1 个答案:

答案 0 :(得分:1)

您不能在容器运行时RUN命令。 RUN在您创建图片时有效。

您可以创建一个小的启动脚本,创建架构,然后启动php并将其放入CMD

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

我确定你也可以把它写进去,但我不太了解发布代码。