Docker-Compose: Containernamen ermitteln

English Deutsch

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:

get_compose_container_name.sh
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:

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"
    }
  ]
}]

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

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