如何从动态启动的compose命令运行docker-compose命令?

时间:2019-07-09 07:21:09

标签: docker docker-compose

由于使用了多个微服务,每个微服务都有自己的数据库依赖性(有些重叠)。我有一个自定义的bash文件,该文件允许开发人员选择他们要在本地运行的微服务(用于测试),它实际上是建立一个命令:

编辑:感谢回答指出,在每个撰写-f文件之前,您确实需要.yml,我确实使用了此文件,但我最初并没有在这里输入。

docker-compose -f \
-f <docker-compose.ms1.yml> -f <docker-compose.ms2.yml> \
-f <docker-compose.dba> -f <docker-compose.dbb> \
up ms1-container ms2-container \
dba-container dbb container

现在这可以正常工作,但是按照传统(使用单个.yml文件并仅运行docker-compose up),如果我想查看输出日志,可以执行docker-compose logs -f,或者要重新启动撰写文件中的特定服务,我将:

docker-compose stop <service_name>
docker-compose rm <service_name>
docker-compose create <service_name>
docker-compose start <service_name>

但是现在所有这些都是动态启动的,如何重新启动特定的docker-compose服务,以及如何使用logs -f进入日志?

1 个答案:

答案 0 :(得分:1)

首先,我认为您的docker-compose命令无效,应该是:

docker-compose -f docker-compose_1.yaml -f docker-compose_2.yaml up -d

然后,一切与您只使用一个docker-compose.yaml的情况相同:

例如

docker-compose_1.yaml:

version: '3'
services:
  frontend:
    image: alpine
    command: "tail -f /dev/null"

docker-compose_2.yaml:

version: '3'
services:
  backend:
    image: alpine
    command: "tail -f /dev/null"

您仍然可以使用docker-compose -f docker-compose_1.yaml -f docker-compose_2.yaml stop frontend停止一项服务:

shubuntu1@shubuntu1:~/77$ docker-compose -f docker-compose_1.yaml -f docker-compose_2.yaml ps
    Name             Command         State     Ports
----------------------------------------------------
77_backend_1    tail -f /dev/null   Up
77_frontend_1   tail -f /dev/null   Exit 137

对于日志,docker-compose -f docker-compose_1.yaml -f docker-compose_2.yaml logs代表所有服务,而docker-compose -f docker-compose_1.yaml -f docker-compose_2.yaml logs backend代表一项服务。

引用official guide

  

您可以提供多个-f配置文件。提供多个文件时,Compose会将它们组合为一个配置。 Compose按照您提供文件的顺序构建配置。后续文件将覆盖并添加到其前身。