根据条件启动docker容器

时间:2016-08-25 06:49:33

标签: docker docker-compose

问题 -

我有一个包含6个服务的docker-compose.yml。当我执行docker-compose时,所有6个容器都已启动,但我需要2个容器来开始其工作,并根据条件休息4个容器。

描述 -

撰写6项服务(2项服务面向所有用户,4项服务面向2位用户): -

为所有用户提供

-2服务

  • 我在第一个容器中安装登录所需页面

  • 我为第二个容器中的登录帐户维护数据库

为每个用户提供

-2服务

  • 根据用户,我从登录页面重定向到不同的应用程序
  • 此时,我将他/她的应用程序安装在另一个容器和数据库中。

有没有办法,当我运行docker-compose up -it应该只启动所有用户共有的2个服务,并根据用户登录我需要启动他/她的应用程序挂载的其他2个服务?吗

2 个答案:

答案 0 :(得分:4)

仅基于用户执行此操作需要Docker Compose之外的逻辑,但您可以进行配置。

扩展服务

您可以使用两个Docker Compose文件来完成类似的结果。

  • 所有用户的2项服务 - docker-compose.yml
  • 2个用户的4项服务 - docker-compose.admin.yml

docker-compose.admin.yml中,原始撰写文件中的赞美覆盖设置以及其他容器。您可以使用替代来更改包括ENV vars或发送到容器的卷的任何内容。

运行docker-compose up时,将启动所有用户的两项服务。

您可以通过运行

运行所有六个容器
docker-compose -f docker-compose.yml -f docker-compose.admin.yml up

别名

.bashrc中设置别名会使每天更容易使用。

# For regular users
alias comp="docker-compose"

# For two special users
alias comp="docker-compose -f docker-compose.yml -f docker-compose.admin.yml"

通过此设置,所有用户都可以使用comp upcomp down并获取相应的容器集。

文档

请参阅Docker文档中的详细信息:

Extending Service in Compose

答案 1 :(得分:0)

我经常有一些基于环境的无操作服务。

如果添加此内容,您将通过外部用户进入容器:

    environment:
      - USER=${USER}
    entrypoint: ./my_entrypoint_conditional_wrapper.sh

在入口点脚本中,检查USER变量,如果服务不应该启动,只需exit 0,否则运行原始入口点。

如果您使用的图像不是您要构建的图像,则可以始终使用volumes仅传递脚本:

    volumes:
      - ./my_entrypoint_conditional_wrapper.sh: /tmp/./my_entrypoint_conditional_wrapper.sh
    entrypoint: /tmp/my_entrypoint_conditional_wrapper.sh