263 votes

docker: format de référence non valide

Je suis en suivant ce tutoriel: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

et ils utiliser docker. Quand j'ai essayé d'exécuter le panneau (à l'intérieur de la run.sh le script):

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

J'ai obtenu l'erreur:

docker: invalid reference format.

J'ai passé 2 heures et je ne peux pas vraiment comprendre ce qui ne va pas. Une idée vraiment apprécié.

267voto

Levon Petrosyan Points 1012

Dans PowerShell, vous devez utiliser ${pwd} vs $(pwd)

71voto

BMitch Points 3744

Le premier argument après le "run" qui n'est pas un drapeau ou d'un paramètre à un drapeau est interprété comme un nom de l'image. Lorsque que l'analyse échoue, il vous indique le format de référence, en l'occurence, le nom de l'image (mais il pourrait être un id de l'image, épinglé une image ou un autre syntaxe) n'est pas valide. Dans votre commande:

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

Le nom de l'image "supervisely_anpr" est valide, alors vous devez regarder plus tôt dans la commande. Dans ce cas, l'erreur est le plus susceptible de pwd de la sortie d'un chemin avec un espace. Après tout l'espace n'est plus un paramètre -v et docker essaie de l'analyser comme le nom de l'image. La solution est de citer le volume des paramètres lorsque vous ne peut pas garantir qu'il est libre d'espaces ou d'autres caractères spéciaux.

Lorsque vous faites cela, vous allez rencontrer l'erreur suivante, "exécutable n'est pas trouvé". Tout ce qui est après le nom de l'image est analysée comme la commande à exécuter à l'intérieur du conteneur. Dans votre cas, essayez d'exécuter la commande --rm -it bash qui sera presque certainement un échec depuis --rm n'existe pas en tant que fichier binaire à l'intérieur de votre image. Vous avez besoin de réorganiser les paramètres à résoudre:

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

J'ai un peu plus de détails sur ces deux erreurs et causes dans mes slides ici: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29

12voto

J'avais un problème similaire. Le problème que je rencontrais était $(pwd) a un espace qui jetait le docker en fuite.

Changez le nom du répertoire pour qu'il n'y ait pas d'espaces, et cela devrait fonctionner si c'est le problème

0voto

Dalton Points 175

J'ai eu le même problème. J'étais en train d'écrire un script bash pour lancer mon conteneur docker sur mon serveur distant, mais a couru dans la même erreur docker: invalid reference format.

old-start-container.sh

#!/bin/bash
docker run -p 80:5000 'dockerrepo/imagename:tag'

C'est la façon dont je l'ai corrigé. J'ai utilisé bash de la substitution de commande pour obtenir le panneau de commande pour exécuter correctement.

new-start-container.sh

#!/bin/bash
$(docker run -p 80:5000 'dockerrepo/imagename:tag')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X