Ist bei einem meiner Projekte auf diesen Docker-Fehler gestoßen:
invalid reference format: repository name must be lowercase
Was sind die verschiedenen Ursachen für diese generische Nachricht?
Ich habe es bereits nach einiger Anstrengung herausgefunden, daher werde ich meine eigene Frage beantworten, um es hier zu dokumentieren, da die Lösung bei einer Websuche nicht sofort angezeigt wird und auch, weil diese Fehlermeldung nicht beschreibt das direkte Problem, auf das Docker stößt.
docker
docker-compose
HostedMetrics.com
quelle
quelle
Antworten:
Eine "Referenz" im Docker ist ein Zeiger auf ein Bild. Es kann sich um einen Bildnamen, eine Bild-ID, einen Registrierungsserver im Namen, ein sha256-Tag zum Anheften des Bildes und alles andere handeln, das verwendet werden kann, um auf das Bild zu verweisen, das Sie ausführen möchten.
Die
invalid reference format
Fehlermeldung bedeutet, dass Docker die von Ihnen angegebene Zeichenfolge nicht in ein Bild konvertieren kann. Dies kann ein ungültiger Name sein oder auf einen Analysefehler früher in derdocker run
Befehlszeile zurückzuführen sein, wenn Sie das Image 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 Parameter nicht mit Leerzeichen angegeben werden und die Reihenfolge der Befehlszeile falsch ist. Die Befehlszeile ist wie folgt angeordnet:Der häufigste Fehler beim Übergeben von Argumenten an den Lauf ist eine Datenträgerzuordnung, die einen Pfadnamen erweitert, der ein Leerzeichen enthält, und den Pfad nicht zitiert oder dem Leerzeichen entgeht. Z.B
Und die Lösung ist so einfach wie:
quelle
Lassen Sie mich betonen, dass Docker nicht einmal gemischte Zeichen zulässt.
Gut:
docker build -t myfirstechoimage:0.1 .
Schlecht:
docker build -t myFirstEchoImage:0.1 .
quelle
hatte ein Leerzeichen im aktuellen Arbeitsverzeichnis und usign
$(pwd)
, um Volumes zuzuordnen. Mag keine Leerzeichen in Verzeichnisnamen.quelle
$(pwd)
in Anführungszeichen und es funktionierte.In meinem Fall war das
-e
vor den Parametern für MySQL DockerÜberprüfen Sie auch, ob Leerzeichen fehlen
quelle
-e
vor einer meiner Umgebungsvariablen.In meinem Fall
docker-compose.yml
enthielt der in Großbuchstaben definierte Bildname Großbuchstaben. Die Tatsache, dass die Fehlermeldungrepository
anstelle von erwähnt wurde,image
half nicht, das Problem zu beschreiben, und es dauerte eine Weile, bis es herausgefunden wurde.quelle
FROM bla:bla AS BUILD
fehlgeschlagen.FROM bla:bla AS build
war OK Thx!In meinem Fall lag das Problem in der Parameteranordnung. Anfangs hatte ich
--name
Parameter nach Umgebungsparametern und dann Volumen undattach_dbs
Parameter und Bild am Ende des Befehls wie unten.Nach dem Umordnen der Parameter wie unten hat alles einwandfrei funktioniert (im Grunde genommen wird der
--name
Parameter gefolgt vom Bildnamen eingegeben).quelle
Unter MacOS enthält Ihr $ PWD ein Verzeichnis "Mobile Documents", wenn Sie an einem iCloud-Laufwerk arbeiten. Es scheint den Raum nicht zu mögen!
Um dieses Problem zu umgehen, habe ich mein Projekt auf ein lokales Laufwerk kopiert, auf dem im Pfad zu meinem Projektordner kein Speicherplatz vorhanden ist.
Ich sehe keine Möglichkeit, den Standardpfad zu iCloud zu ändern
~/Library/Mobile Documents/com~apple~CloudDocs
Der Platz im Pfad in "Mobile Documents" scheint das zu sein, was Docker Run nicht mag.
quelle
Mobile\ Documents
Das Ersetzen
image: ${DOCKER_REGISTRY}notificationsapi
durchimage:notificationsapi
oderimage: ${docker_registry}notificationsapi
in docker-compose.yml hat das Problem behobenDatei mit Fehler
Datei ohne Fehler
Ich denke, der Fehler war auf Kleinbuchstaben zurückzuführen
quelle
Für mich war das Problem mit dem Speicherplatz in der Datenträgerzuordnung, der nicht maskiert wurde. Der Jenkins-Job, der den Docker-Ausführungsbefehl ausführte, hatte ein Leerzeichen und daher konnte die Docker-Engine den Docker-Ausführungsbefehl nicht verstehen.
quelle
Tatsächlich verarbeitet die Docker-Registrierung ab heute (sha
2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305
) keine Pfade, die Großbuchstaben enthalten. Dies ist offensichtlich eine schlechte Wahl für das Design, wahrscheinlich weil Sie mit bestimmten Betriebssystemen kompatibel bleiben möchten, bei denen die Groß- und Kleinschreibung auf Dateiebene (z. B. Windows ) nicht unterschieden wird .Wenn man sich für einen Bereich authentifiziert und versucht, ein nicht vorhandenes Repository mit Kleinbuchstaben abzurufen, lautet die Ausgabe
Wenn man dies jedoch mit einer Großbuchstabenkomponente versucht, wird nur 404 zurückgegeben:
quelle
Manchmal vermisst du das Flag -e, während bestimmte mehrere Umgebungsvariablen inline sind
zB schlecht:
docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
gut:
docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
quelle
Ein
reference
in Docker zeigt auf ein Bild. Dies kann sich in einer Remote-Registrierung oder in der lokalen Registrierung befinden. Lassen Sie mich zuerst die Fehlermeldung beschreiben und dann die Lösungen dafür zeigen.Dies bedeutet, dass die von uns verwendete Referenz kein gültiges Format ist. Dies bedeutet, dass die Referenz (Zeiger), mit der wir ein Bild identifiziert haben, ungültig ist. Im Allgemeinen folgt darauf eine Beschreibung wie folgt. Dadurch wird der Fehler viel deutlicher.
Dies bedeutet, dass die von uns verwendete Referenz keine Großbuchstaben enthalten sollte. Versuchen Sie,
docker run Ubuntu
( falsch ) gegendocker run ubuntu
( richtig ) zu laufen . Docker erlaubt keine Großbuchstaben als Bildreferenz. Einfache Schritte zur Fehlerbehebung.1) Dockerfile enthält Großbuchstaben als Bilder.
2) Der in der Datei docker-compose.yml definierte Bildname hatte Großbuchstaben
3) Wenn Sie Jenkins oder GoCD zum Bereitstellen Ihres Docker-Containers verwenden, überprüfen Sie den Befehl run, ob der Image-Name einen Großbuchstaben enthält.
Bitte lesen Sie dieses Dokument, das speziell für diesen Fehler geschrieben wurde.
quelle
Ich hatte den gleichen Fehler, und aus irgendeinem Grund scheint er durch Großbuchstaben im Jenkins-Job verursacht worden zu sein, der den
docker run
Befehl ausgeführt hat.quelle
Dies geschieht aufgrund der Leerzeichen im aktuellen Arbeitsverzeichnis, aus denen
$(pwd)
für Kartenvolumes stammen. Also habe ich benutztdocker-compose
stattdessen verwendet.Die
docker-compose.yml
Datei.quelle
"Docker-Build -f Docker-Datei -t SpringBoot-Docker." Wie in der obigen Empfehlung erstellen wir eine Bilddatei für den Docker-Container. Commend sagt, dass Sie eine Image-Use-Datei erstellen ( -f beziehen sich auf die Docker-Datei ) und -t für das Ziel der Image-Datei, die wir an Docker senden möchten. das "." repräsentiert das aktuelle Verzeichnis
Lösung für das obige Problem: Geben Sie den Namen des Zielbilds in Kleinbuchstaben an
quelle
Docker kann Bilder automatisch erstellen, indem es die Anweisungen aus einer Docker-Datei liest. Eine Docker-Datei ist ein Textdokument, das alle Befehle enthält, die ein Benutzer in der Befehlszeile aufrufen kann, um ein Bild zusammenzustellen. Beispiel: FROM Python: 3.7-alpine Die 'Python' sollte in Kleinbuchstaben geschrieben werden
quelle
In meinem Fall habe ich versucht, Postgres durch Docker zu führen. Anfangs lief ich als:
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password POSTGRES_USER=test_user POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
Ich habe -e nach jeder Umgebungsvariablen vermisst . Das Ändern des obigen Befehls in den folgenden hat funktioniert
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password -e POSTGRES_USER=test_user -e POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
quelle
Ich wünschte, die Fehlermeldung würde die Problemzeichenfolge ausgeben. Ich bekam dies aufgrund eines seltsamen Problems beim Kopieren und Einfügen eines "Docker Run" -Befehls. Ein platz- wie Charakter wurde vor den Repo- und Bildnamen verwendet wird.
quelle
Die meisten der oben genannten Antworten haben in meinem Fall nicht funktioniert, daher werde ich dies dokumentieren, falls jemand es hilfreich findet. Die erste Zeile in der Docker-Datei
FROM node:10
für meinen Fall, das Wort Knoten sollte nicht in Großbuchstaben sein, dhFROM NODE:10
. Ich habe diese Änderung vorgenommen und es hat funktioniert.quelle
In meinem Fall enthielt DockerFile den Bildnamen in gemischter Groß- und Kleinschreibung anstelle von Kleinbuchstaben.
Frühere Zeile in meiner DockerFile
und als ich oben zu
FROM centos
wechselte, funktionierte es reibungslos.quelle
In meinem Fall hatte ich einen nackten
--env
Schalter, dh einen ohne tatsächlichen Variablennamen oder -wert, z.quelle
Versuchen Sie, in Ihrem DockerFile Kleinbuchstaben zu verwenden
Verwenden Sie zum Beispiel:
anstatt
quelle