web-dev-qa-db-fra.com

docker: format de référence non valide

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

et ils utilisent docker. Lorsque j'ai essayé d'exécuter docker (dans le script run.sh):

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

J'ai eu l'erreur:

docker: invalid reference format.

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

61
ai2016

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

42
Levon Petrosyan

Après le "run", le premier argument qui n'est pas un indicateur ni un paramètre associé à un indicateur est analysé comme un nom d'image. Lorsque cette analyse échoue, elle vous indique que le format de référence, c'est-à-dire le nom de l'image (mais il peut s'agir d'un identifiant d'image, d'une image épinglée ou d'une 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. Vous devez donc regarder plus tôt dans la commande. Dans ce cas, l'erreur provient probablement de pwd en sortie d'un chemin contenant un espace. Tout ce qui suit l'espace n'est plus un paramètre pour -v et docker tente de l'analyser sous le nom de l'image. Le correctif consiste à citer les paramètres de volume lorsque vous ne pouvez pas garantir qu'il ne contient pas d'espace ou d'autres caractères spéciaux.

Lorsque vous faites cela, vous rencontrerez l'erreur suivante, "exécutable non trouvé". Tout ce qui suit le nom de l'image est analysé en tant que commande à exécuter à l'intérieur du conteneur. Dans votre cas, il essaiera d’exécuter la commande --rm -it bash qui échouera presque certainement car --rm n’existera pas en tant que binaire dans votre image. Vous devez réorganiser les paramètres pour résoudre ce problème:

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

J'ai quelques détails supplémentaires sur ces deux erreurs et causes dans mes diapositives ici: https://Sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29

23
BMitch

J'avais un problème similaire. Le problème que je rencontrais était $(pwd) a un espace là-bas où le docker s'est échappé.

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

2

J'ai eu le même problème. J'essayais d'écrire un script bash pour exécuter mon conteneur docker sur mon serveur distant, mais j'ai rencontré la même erreur docker: invalid reference format.

old-start-container.sh

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

Voici comment je l'ai corrigé. J'ai utilisé bash substitution de commande pour que la commande docker s'exécute correctement.

new-start-container.sh

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