Docker-Compose: Containernamen ermitteln
Nehmen wir an, das Verzeichnis, in dem sich deine docker-compose.yml befindet, heißt myservice
Wenn du beispielsweise eine docker-compose.yml hast, die einen Service mongo deklariert, der MongoDB ausführt, wird docker-compose den Container mongo oder mongo-1 nennen.
Allerdings wird docker selbst diesen Container myservice-mongo-1 nennen.
Um den tatsächlichen Docker-Namen deines Containers herauszufinden — vorausgesetzt der Container läuft — verwende den folgenden Code:
docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'Dies verwendet docker-compose ps, um laufende Container aufzulisten und einige Informationen als JSON zu exportieren, zum Beispiel:
[{
"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"
}
]
}]Dann verwenden wir jq (einen Kommandozeilen-JSON-Prozessor), um a) nur den Eintrag in der Liste der laufenden Container auszuwählen, bei dem das Service-Attribut gleich mongo ist, b) den ersten mit [0] zu nehmen und das Name-Attribut abzurufen, das den Namen des Containers speichert.
Beispielausgabe
$ docker-compose ps --format json | jq -r 'map(select(.Service=="mongo"))[0].Name'
myservice-mongo-1