How to get container name of docker-compose container
Lets’s assume the directory where your docker-compose.yml
is located is called myservice
If you have, for example, a docker-compose.yml
that declares a service mongo
running MongoDB, docker-compose
will call the container mongo
or mongo-1
.
However, docker
itself will call that container myservice-mongo-1
.
In order to find out the actual docker name of your container - assuming the container is running - use the following code:
docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'
This uses docker-compose ps
to list running containers, exporting some information as JSON, for example:
[{
"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"
}
]
}]
Then we use jq
(a command line JSON processor) to a) select only the entry in the list of running containers where the Service
attribute equals mongo
, b) take the first one using [0]
and get the Name
attribute which stores the name of the container.
Example output
$ docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'
myservice-mongo-1