gpt4 book ai didi

docker - 在 Dockerfile __after__ 链接容器启动后运行命令

转载 作者:行者123 更新时间:2023-12-01 15:03:24 25 4
gpt4 key购买 nike

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

假设我想运行 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

最佳答案

您不能在容器运行时RUN 命令。 RUN 在您创建图像时起作用。

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

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

我相信你也可以把它放在 compose 中,但我对它的了解还不够多,无法发布代码。

关于docker - 在 Dockerfile __after__ 链接容器启动后运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com