如何选择启动docker-compose依赖容器?

时间:2019-01-08 11:46:39

标签: docker docker-compose

我有一个docker-compose项目,(简化)如下:

version: '3'
services:
  main:
    image: main-image
    depends_on:
      - my_service
  my_service:
    image: very-big-image

my服务提供的功能也可以在云中使用。在本地运行它的速度更快,但是需要占用大量CPU和磁盘资源。因此,有时我只想运行main,而有时又要运行两个容器。

我不想复制docker-compose代码;完整的容器定义比上面的简化版本复杂得多。

我以为可以将每个服务放在其自己的.yml文件中,然后执行docker-compose -f main.yml -f my_service.yml up,但是在depends-on行上失败了,这似乎要求依赖项位于同一文件。

就目前而言,我有一个丑陋的解决方案。我一分为二(第二个文件以depends_on行开头。然后,我使用一个Shell脚本了解我要运行的配置,然后运行第一个文件或将两个文件串联在一起。我想;但是很丑。

正确的方法是什么?

2 个答案:

答案 0 :(得分:0)

尝试一下:

docker-compose start <container_name>

此命令仅启动选定的容器。

答案 1 :(得分:0)

  

正确的方法是什么?

我认为您已经确定了它:在两个文件之间拆分服务定义,以便有时可以同时启动两个文件:

docker-compose -f main.yml -f service.yml up

有时您只能启动服务容器:

docker-compose -f service.yml up

这很好用,并且depends_on键不需要所有定义都在同一个文件中。在docker-compose尝试解决依赖关系之前,将字典合并。

例如,如果我有main.yml

---
version: "3"
services:
  main:
    image: alpine
    command: sleep 30
    depends_on:
      - service

service.yml中:

---
version: "3"
services:
  service:
    image: alpine
    command: sleep 30

我可以像这样启动service容器:

$ docker-compose -f service.yml up
Starting compose_service_1 ... done
Attaching to compose_service_1

或者我可以同时启动mainservice容器:

$ docker-compose -f main.yml -f service.yml up
Starting compose_service_1 ... done
Starting compose_main_1    ... done
Attaching to compose_service_1, compose_main_1

如果您看到的行为似乎与此矛盾,那么使用最少的重现该问题的示例来更新您的问题,并包括运行docker-compose时产生的任何错误,将对您有所帮助。