获取docker-compose创建的容器的ID

时间:2019-02-04 10:41:11

标签: docker docker-compose

我们在测试管道中使用Docker compose并并行运行多个测试(来自同一提交,例如单元测试+静态类型测试+代码质量...)。问题在于,使用其中一种测试,我们需要启动docker-compose服务堆栈,然后在其中一个容器中exec

但是,由于我们运行测试的方式,docker-compose ps servicename将返回多个ID。

我需要运行docker-compose up -d 并立即获取启动的服务的ID。不能使用docker-compose ps

有什么办法可以做到这一点?我想到的唯一方法是使用sedcontainer_name中的docker-compose.yml替换为确定性的但唯一的名称,仅用于CI测试,但是感觉很脏。 >

1 个答案:

答案 0 :(得分:0)

适合我的情况的是使用magic environment variable COMPOSE_PROJECT_NAME。设置此变量并调用docker-compose时,它将“自身”限制为该项目名称。

这意味着:

# Start a new stack of containers, overriding their project name (it defaults to the directory name)
$ COMPOSE_PROJECT_NAME=foobar docker-compose up -d

# This gives empty result
$ docker-compose ps 

# This gives the containers started above
$ COMPOSE_PROJECT_NAME=foobar docker-compose ps

# This starts a whole new stack, not affecting the output of the commands above
$ COMPOSE_PROJECT_NAME=second docker-compose up -d 

# This still only returns the services started in the first command
$ COMPOSE_PROJECT_NAME=foobar docker-compose ps

通过这种方式,我可以将COMPOSE_PROJECT_NAME定义为由提交SHA和阶段/测试名称组成的块。这样可以使名称唯一,并避免冲突。

这与使用-p的{​​{1}}参数具有相同的效果。