Docker: Ungültiges Referenzformat


104

Ich folge diesem Tutorial: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

und sie benutzen Docker. Als ich versuchte, Docker auszuführen (im Skript run.sh):

docker run -p 8888:8888 -v `pwd`/../src:/src -v `pwd`/../data:/data -w /src supervisely_anpr --rm -it bash

Ich habe den Fehler bekommen:

docker: invalid reference format.

Ich habe 2 Stunden verbracht und kann nicht wirklich verstehen, was los ist. Jede Idee wirklich geschätzt.


3
Versuchen Sie diesdocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani

5
Wie bei @TarunLalwani und @Oleg erwähnt, müssen Sie das --rmund -itdazwischen runund den Bildnamen verschieben . Das erklärt die Fehlermeldung jedoch nicht. Haben Sie überprüft, ob die Bildnamenzeichen keine spezielle Codierung oder Großbuchstaben haben? Das Kopieren und Einfügen aus Ihrem Snippet funktioniert für mich, während docker run --rm foo! bashder gleiche Fehler wie bei Ihnen gedruckt wird.
Gesellix


4
Doppelte Anführungszeichen für Dollar-Erweiterungen, es sei denn, Sie möchten die Zeichenfolge wirklich in Wörter aufteilen. Hier verwenden "$(pwd)"(moderne Form von "`pwd`"). Ihr Befehl wird docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon

1
@gesellix danke. Das Kopieren und Einfügen von Befehlen aus Handbüchern sollte beim Erlernen neuer Inhalte nicht in erster Linie erfolgen, da dies zu unerwarteten Schmerzen führen kann, wenn ein hinterhältiges, beschädigtes Symbol beteiligt ist. Gut, dass ich Ihren Kommentar gesehen habe, bevor ich zwei Stunden oder einen halben Tag mit einem solchen "Fehler" verbracht habe ^ _ ^
Den Drobiazko

Antworten:


88

In Powershell solltest du ${pwd}vs.$(pwd)


7
Dies hat mich veranlasst, meinen Kopf gegen die Wand zu
schlagen

docker run --rm -ti --name zalenium -p 4444:4444 -p 5555:5555 \ -e SAUCE_USERNAME -e SAUCE_ACCESS_KEY \ -v /tmp/videos:/home/seluser/videos \ -v /var/run/docker.sock:/var/run/docker.sock \ dosel/zalenium start --sauceLabsEnabled trueWas ist los mit meinem Befehl? Es gibt auch den gleichen Fehler.
Paul

Ich danke dir sehr!
Andrew Brennan

45

Das erste Argument nach dem "Ausführen", das kein Flag oder Parameter für ein Flag ist, wird als Bildname analysiert. Wenn diese Analyse fehlschlägt, wird angezeigt, dass das Referenzformat, auch bekannt als Bildname (kann jedoch eine Bild-ID, ein angeheftetes Bild oder eine andere Syntax sein), ungültig ist. In Ihrem Befehl:

 docker run -p 8888:8888 -v `pwd`/../src:/src -v `pwd`/../data:/data -w /src supervisely_anpr --rm -it bash

Der Bildname "Supervisely_anpr" ist gültig, daher müssen Sie im Befehl früher nachsehen. In diesem Fall ist der Fehler höchstwahrscheinlich auf die pwdAusgabe eines Pfads mit einem Leerzeichen zurückzuführen. Alles nach dem Leerzeichen ist kein Parameter mehr -vund Docker versucht, es als Bildnamen zu analysieren. Die Korrektur besteht darin, die Volumenparameter anzugeben, wenn Sie nicht garantieren können, dass sie frei von Leerzeichen oder anderen Sonderzeichen sind.

Wenn Sie dies tun, wird der nächste Fehler "ausführbare Datei nicht gefunden" angezeigt. Alles nach dem Bildnamen wird als Befehl zum Ausführen im Container analysiert. In Ihrem Fall wird versucht, den Befehl auszuführen, der --rm -it bashmit ziemlicher Sicherheit fehlschlägt, da er --rmin Ihrem Image nicht als Binärdatei vorhanden ist. Sie müssen die Parameter neu anordnen, um dies zu beheben:

 docker run --rm -it -p 8888:8888 -v "`pwd`/../src:/src" -v "`pwd`/../data:/data" -w /src supervisely_anpr  bash

Weitere Informationen zu diesen beiden Fehlern und Ursachen finden Sie in meinen Folien hier: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
Folie 30 hat mein Problem gelöst . Ich hatte eine .sh-Datei in Cygwin ausgeführt. Ich habe mich geändert # !/bin/bash(beachte den Abstand zwischen #und !bis #!/bin/bash und dann den End of Line Sequencevon CRLFbis LF. Das war alles, was ich getan habe. Danke @BMitch für das Teilen der Folien.
blongho

10

Ich hatte das gleiche Problem, als ich copy-pastedden Befehl. Stattdessen hat es funktioniert, als ich den gesamten Befehl eingegeben habe!

Viel Glück...


2
Wow, das hat tatsächlich geholfen.
Matjag

3
Ja, für mich wurde es --nameeingefügt, -weil der Editor es automatisch geändert hat. Danke, du hast mir Zeit gespart.
Rvy Pandey

7

Ich hatte ein ähnliches Problem. Das Problem, das ich hatte, war, dass $(pwd)dort ein Platz war, an dem der Docker weglief.

Ändern Sie den Verzeichnisnamen so, dass dort keine Leerzeichen vorhanden sind. Dies sollte funktionieren, wenn dies das Problem ist


3

Ich bin auf dieses Problem gestoßen, als ich keine Umgebungsvariable festgelegt hatte.

docker push ${repo}${image_name}:${tag}

repound image_namewurden definiert, aber tagnicht.

Dies führte zu docker push repo/image_name:.

Welches warf die docker: invalid reference format.


Ich hatte das gleiche Problem und habe es behoben, indem ich die fehlende Umgebungsvariable export tag = latest
PHZ.fi-Pharazon

1

Gefunden, dass mit docker-compose configgemeldet, was das Problem war.

In meinem Fall eine überschriebene Erstellungsdatei mit einem Eintrag, der nichts überschrieb .


0

Dies geschieht auch, wenn Sie in der Produktion Entwicklungs-Docker-Kompositionen wie die folgenden verwenden. Sie möchten keine Bilder in der Produktion erstellen, da dies die Ideologie der Container bricht. Wir sollten Images bereitstellen:

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"

Ändern Sie dies, um das erstellte Image zu verwenden:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.