如何在不覆盖现有命令的情况下将命令追加到docker-compose.yml?

时间:2019-06-12 10:39:19

标签: docker docker-compose

在docker-compose.yml中,我有一项服务

app:
    image: yiisoftware/yii2-php:7.1-apache
    volumes:
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      - ./:/app:delegated
    ports:
      - '80:80'
    depends_on:
      - db

因此,我想在启动容器时执行命令yii migrate --interactive=0。但是如果我只添加字符串

command: "yii migrate --interactive=0"

它会覆盖yiisoftware/yii2-php:7.1-apache dockerfile中已经指定的命令。如何追加命令而不是替换?有可能吗?

我已经用谷歌搜索了这个问题,但是最受欢迎的解决方案是“创建自己的dockerfile”。我是否可以仅使用docker-compose而无需创建/修改dockerfile或shell脚本来解决此问题?

2 个答案:

答案 0 :(得分:1)

为此,您必须定义自己的ENTRYPOINT in your docker-compose.yml。除了构建自己的Dockerfile之外,没有其他解决方法。

尽管我一直在搜索,但是在该映像的Dockerfile中找不到CMD指令。因此,this可能正在使用。

我对PHP并不熟悉,所以我无法估计要运行具有特定需求的容器需要进行哪些更改,但这是您应该查看的要点。

答案 1 :(得分:1)

您可以在新命令中包含预先存在的命令。现在,您可以从sh或bash调用这些命令中的所有内容。因此,通过执行以下操作来查找现有命令:

docker image inspect yiisoftware/yii2-php:7.1-apache

然后在Config {Command}中检查命令。 (不是ConatinerConfig。)因此,如果现有命令为:

"start-daemon -z foo-bar"

那么您的新命令将是:

sh -c "start-daemon -z foo-bar; yii migrate --interactive=0"

现在,您将拥有现有命令以及新命令和所需的效果。