如何获取 docker-compose 容器的容器名称

假设你的 docker-compose.yml 所在目录名为 myservice

例如,如果你有一个声明运行 MongoDB 的 mongo 服务的 docker-compose.ymldocker-compose 将调用容器 mongomongo-1

但是,docker 本身将调用该容器 myservice-mongo-1

要找出容器的实际 docker 名称 - 假设容器正在运行 - 使用以下代码:

get_compose_container_name.sh
docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'

这使用 docker-compose ps 列出运行中的容器,将一些信息导出为 JSON,例如:

docker-compose-ps.json
[{
  "ID": "2d68b1c1625dbfb41e05f55af0a333b5700332112c6c7551f78afe27b1dfc7ad",
  "Name": "production-mongo-1",
  "Command": "docker-entrypoint.sh mongod",
  "Project": "production",
  "Service": "mongo",
  "State": "running",
  "Health": "",
  "ExitCode": 0,
  "Publishers": [
    {
      "URL": "",
      "TargetPort": 27017,
      "PublishedPort": 0,
      "Protocol": "tcp"
    }
  ]
}]

然后我们使用 jq(命令行 JSON 处理器)来 a) 仅选择列表中 Service 属性等于 mongo 的运行容器条目,b) 使用 [0] 取第一个,并获取存储容器名称的 Name 属性。

示例输出

example-output.txt
$ docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'
myservice-mongo-1

Check out similar posts by category: Container, Docker