【问题标题】:docker-compose not running commandsdocker-compose 没有运行命令
【发布时间】:2015-09-06 21:29:07
【问题描述】:

我有这样的 docker-compose:

web:
  build: ../../
  dockerfile: environments/production/Dockerfile
  links:
      - fpm:fpm
      - redis:redis
      - elasticsearch:elasticsearch
      - beanstalkd:beanstalkd
  volumes:
      - /var/cache/nginx
      - ../../:/app:ro
...
composer:
  image: imega/composer
  volumes:
    - ../../:/data
  command: ["install"]
node:
  image: node:slim
  volumes:
    - ../../:/app
  working_dir: /app
  entrypoint: npm
  command: ["install"]

目标是在构建时安装 composer 和 node deps。它理论上应该可以工作,但实际上容器定义中编写的命令并没有执行。任何命令。我试图在那里运行“回声”或“ls”。 ——什么都没有。

有什么想法吗?

【问题讨论】:

    标签: php docker composer-php docker-compose


    【解决方案1】:

    我认为您在这里误解了几件事:

    • 您正在运行npm install 以在卷中安装依赖项,然后该卷被您的应用程序容器使用。这不包含应用程序映像中的任何依赖项。虽然这可能有效,但这意味着图像并不能真正独立运行。当您将此图像交付生产时,您违反了“此应用程序与开发相同”的合同。请注意这一点。
    • 您正在将npm install 作为最终退出的服务运行。当命令退出时,容器停止。此外,web 服务(可能取决于这些依赖项)可能会在 npm install 完成之前启动。

    您是否有理由不希望将composer installnpm install 作为应用程序构建过程的一部分?

    【讨论】:

    • Volume 设置为主机目录,这就是这个想法——服务直接与主机交互并将依赖项直接安装到主机。这就是该容器的设计用途:hub.docker.com/r/imega/composer 问题不在某些服务中,但是传递给“命令”的任何命令都不起作用。我在那里写'ls'。或者'echo hi'——没有输出。 »» 您是否有不希望将 composer install 和 npm install 作为应用程序构建过程的一部分的原因? — 实际上,我正在尝试为自动部署获得最佳工作流程。您认为有更好的方法吗?
    • 之前我在主容器(web)中构建和测试应用程序时尝试过一种方法,这一切都写在 dockerfile 中。那是有效的,但现在我试着让事情变得更干,更单一的责任,因为它应该在 docker 中。我什至把 nginx 和 fpm 分开了。考虑到这一点,我正在尝试重新设计工作流程..
    【解决方案2】:

    不要使用命令:["install"]

    尝试:

    命令:安装

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多