问题 -
我有一个包含6个服务的docker-compose.yml。当我执行docker-compose时,所有6个容器都已启动,但我需要2个容器来开始其工作,并根据条件休息4个容器。
描述 -
撰写6项服务(2项服务面向所有用户,4项服务面向2位用户): -
为所有用户提供-2服务
我在第一个容器中安装登录所需页面
我为第二个容器中的登录帐户维护数据库
-2服务
有没有办法,当我运行docker-compose up -it应该只启动所有用户共有的2个服务,并根据用户登录我需要启动他/她的应用程序挂载的其他2个服务?吗
答案 0 :(得分:4)
仅基于用户执行此操作需要Docker Compose之外的逻辑,但您可以进行配置。
您可以使用两个Docker Compose文件来完成类似的结果。
在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 up
或comp down
并获取相应的容器集。
请参阅Docker文档中的详细信息:
答案 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