如何获取 docker-compose 容器的容器名称
假设你的 docker-compose.yml 所在目录名为 myservice
例如,如果你有一个声明运行 MongoDB 的 mongo 服务的 docker-compose.yml,docker-compose 将调用容器 mongo 或 mongo-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-1If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow