我希望在启动链接容器后在容器中运行命令。
让我们说我想运行php app/console doctrine:schema:create
(或任何其他用于预先填充我的数据库架构的应用程序......不一定是php / symfony,但没有像sql脚本那样简单,可以是一旦我的容器被构建,就在数据库容器中运行,但显然 之后构建了数据库容器并且已经安装了应用程序卷。
init脚本是:
这是我的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 :(得分:1)
您不能在容器运行时RUN
命令。 RUN
在您创建图片时有效。
您可以创建一个小的启动脚本,创建架构,然后启动php并将其放入CMD
。
或者您可以专门创建一个小图像来创建架构。您运行容器,它会创建架构,然后退出。
我确定你也可以把它写进去,但我不太了解发布代码。