webentwicklung-frage-antwort-db.com.de

Andockfehler: ungültiges Referenzformat: Repository-Name muss in Kleinbuchstaben angegeben werden

Dieser Docker-Fehler ist bei einem meiner Projekte aufgetreten:

invalid reference format: repository name must be lowercase

Was sind die verschiedenen Ursachen für diese generische Nachricht?

Ich habe es schon nach einiger Anstrengung herausgefunden, also werde ich meine eigene Frage beantworten, um sie hier zu dokumentieren, da die Lösung bei einer Websuche nicht sofort erscheint und auch, weil diese Fehlermeldung nicht beschreibt das direkte Problem, dem Docker begegnet.

11

In meinem Fall lag das Problem in der Parameteranordnung. Anfangs hatte ich --name-Parameter nach Umgebungsparametern und dann Volumen- und attach_dbs-Parameter und ein Bild am Ende des Befehls wie unten. 

docker run -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 -v c:/temp/:c:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['c:\\temp\\TestDb.mdf','c:\\temp\\TestDb_log.ldf']}]" -d Microsoft/mssql-server-windows-express

Nachdem die Parameter wie unten neu angeordnet wurden, funktionierte alles gut (im Grunde genommen --name-Parameter gefolgt vom Bildnamen).

docker run -d -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 Microsoft/mssql-server-windows-express -v C:/temp/:C:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['C:\\temp\\TestDb.mdf','C:\\temp\\TestDb_log.ldf']}]"
7
josip.k

hatte ein Leerzeichen im aktuellen Arbeitsverzeichnis und verwendet $(pwd) zum Zuordnen von Volumes. Mag keine Leerzeichen in Verzeichnisnamen.

4
Colin Claverie

Eine "Referenz" im Andockfenster ist ein Zeiger auf ein Bild. Dies kann ein Image-Name, eine Image-ID sein, einen Registrierungsserver im Namen enthalten, ein Sha256-Tag verwenden, um das Image zu pinnen, und alles andere, was verwendet werden kann, um auf das Image zu zeigen, das Sie ausführen möchten.

Die invalid reference format-Fehlermeldung bedeutet, dass das Andockfenster die von Ihnen bereitgestellte Zeichenfolge nicht in ein Bild konvertieren kann. Dies kann ein ungültiger Name sein oder von einem Analysefehler zu einem früheren Zeitpunkt in der docker run-Befehlszeile stammen, wenn Sie das Bild auf diese Weise ausführen. Wenn Sie bei einer Erstellungsdatei eine Variable im Bildnamen erweitern, wird diese Variable möglicherweise nicht richtig erweitert.

Bei der docker run-Befehlszeile führt dies häufig dazu, dass keine Parameter mit Leerzeichen angegeben werden und die Reihenfolge der Befehlszeile falsch ist. Die Befehlszeile ist wie folgt angeordnet:

docker ${args_to_docker} run ${args_to_run} image_ref ${cmd_to_exec}

Der häufigste Fehler bei der Übergabe von Argumenten an den Lauf ist eine Datenträgerzuordnung, die einen Pfadnamen erweitert, der ein Leerzeichen enthält, ohne den Pfad anzugeben oder das Leerzeichen zu umgehen. Z.B.

docker run -v $(pwd):/data image_ref

Und der Fix ist so einfach wie:

docker run -v "$(pwd):/data" image_ref
3
BMitch

In meinem Fall enthielt der in docker-compose.yml definierte Bildname Großbuchstaben. Die Tatsache, dass die Fehlermeldung repository anstelle von image erwähnte, half nicht, das Problem zu beschreiben, und es dauerte eine Weile, bis sie herausgefunden hatte.

2

Wenn Sie unter MacOS auf einem iCloud-Laufwerk arbeiten, enthält Ihre $ PWD ein Verzeichnis "Mobile Documents". Es scheint den Raum nicht zu mögen!

Um dieses Problem zu umgehen, habe ich mein Projekt auf ein lokales Laufwerk kopiert, wo im Pfad zu meinem Projektordner kein Platz ist.

Ich sehe keinen Weg, wie Sie den Standardpfad zu iCloud ändern können, nämlich ~/Library/Mobile Documents/com~Apple~CloudDocs.

Das Leerzeichen im Pfad in "Mobile Documents" scheint dem Andocklauf nicht zu entsprechen.

1
user279838

Lassen Sie mich betonen, dass Docker nicht einmal gemischte Zeichen erlaubt.

Gut: docker build -t myfirstechoimage:0.1 .

Schlecht: docker build -t myFirstEchoImage:0.1 .

0
Z3d4s

Ich hatte den gleichen Fehler und scheint aus irgendeinem Grund in Großbuchstaben in dem Jenkins-Job gewesen zu sein, der den Befehl docker run ausgeführt hat. 

0
kenneho

Das Ersetzen von image: ${DOCKER_REGISTRY}notificationsapi Durch image:notificationsapi Oder image: ${docker_registry}notificationsapiin in docker-compose.yml hat das Problem gelöst

datei mit Fehler

  version: '3.4'

services:
  notifications.api:
    image: ${DOCKER_REGISTRY}notificationsapi
    build:
      context: .
      dockerfile: ../Notifications.Api/Dockerfile

datei ohne Fehler 

version: '3.4'

services:
 notifications.api:
    image: ${docker_registry}notificationsapi
    build:
      context: .
      dockerfile: ../Notifications.Api/Dockerfile

Ich denke also, der Fehler war auf nicht Kleinbuchstaben zurückzuführen

0
nandithakw

Für mich war das Problem mit dem Speicherplatz im Volume-Mapping, dem nicht entgangen wurde. Der Jenkins-Job, auf dem der Docker-Run-Befehl ausgeführt wurde, hatte ein Leerzeichen, sodass die Docker-Engine den Docker-Run-Befehl nicht verstehen konnte.

0
Vipul Malgotra

Dies geschieht aufgrund der Leerzeichen im aktuellen Arbeitsverzeichnis, die von $(pwd) für Kartendatenträger stammen. Also habe ich stattdessen docker-compose verwendet.

Die docker-compose.yml-Datei.

version: '3'
services:
  react-app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - /app/node_modules
      - .:/app
0
Ritwik

Tatsächlich verarbeitet die Docker-Registrierung (sha 2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305) heute keine Pfade, die Großbuchstaben enthalten. Dies ist offensichtlich eine schlechte Entwurfsentscheidung, wahrscheinlich aufgrund des Wunsches, mit bestimmten Betriebssystemen kompatibel zu sein, die auf Dateiebene keine Unterscheidung treffen (z. B. windows ). 

Wenn Sie sich für einen Bereich authentifizieren und versuchen, ein nicht vorhandenes Repository mit Kleinbuchstaben abzurufen, wird die Ausgabe ausgegeben 

(auth step not shown)
curl -s -H "Authorization: Bearer $TOKEN" -X GET https://$LOCALREGISTRY/v2/test/someproject/tags/list
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"test/someproject","Action":"pull"}]}]}

Wenn Sie dies jedoch mit einer Komponente in Großbuchstaben versuchen, wird nur 404 zurückgegeben:

(authorization step done but not shown here)
$ curl -s -H "Authorization: Bearer $TOKEN" -X GET https://docker.uibk.ac.at:443/v2/test/Someproject/tags/list

404 page not found
0
Otheus