我有一个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脚本了解我要运行的配置,然后运行第一个文件或将两个文件串联在一起。我想;但是很丑。
正确的方法是什么?
答案 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
或者我可以同时启动main
和service
容器:
$ 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
时产生的任何错误,将对您有所帮助。