docker: format de référence non valide

104

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

et ils utilisent docker. Quand 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 comprends pas vraiment ce qui ne va pas. Toute idée vraiment appréciée.

ai2016
la source
3
Essayez cecidocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani
5
Comme @TarunLalwani et @Oleg l'ont mentionné, vous devrez déplacer le --rmet -itentre runet le nom de l'image. Cela n'expliquera cependant pas le message d'erreur. Avez-vous vérifié si les caractères du nom de l'image n'ont pas d'encodage spécial ou de majuscules? Copier et coller à partir de votre extrait de docker run --rm foo! bashcode fonctionne pour moi, tout en imprimant la même erreur que la vôtre.
gesellix
3
envisager de poster une réponse à cela, il est donc plus facile de trouver pour le prochain gars
lloiacono
4
Les expansions en dollars doivent toujours être entre guillemets, sauf si vous voulez vraiment diviser la chaîne en mots. Ici, utilisez "$(pwd)"(forme moderne de "`pwd`"). Votre commande devient docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon
1
@gesellix merci. Le copier-coller de commandes à partir de manuels ne doit pas être effectué en premier lieu lors de l'apprentissage de nouvelles choses, mis à part le fait que cela peut entraîner une douleur inattendue lorsqu'un symbole corrompu sournois est impliqué. Heureusement que j'ai vu votre commentaire avant de passer deux heures ou une demi-journée sur une telle "erreur" ^ _ ^
Den Drobiazko

Réponses:

88

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

Levon Petrosyan
la source
7
C'est ce qui m'a fait cogner la tête contre le mur (parfois je déteste M $ FT)
beerwin
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 truequel est le problème avec ma commande? Cela donne également la même erreur.
paul
Merci beaucoup!
Andrew Brennan le
45

Le premier argument après le "run" qui n'est pas un indicateur ou un paramètre d'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 qui peut être un identifiant d'image, une image épinglée ou 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 "supervately_anpr" est valide, vous devez donc regarder plus tôt dans la commande. Dans ce cas, l'erreur est probablement pwddue à la sortie d'un chemin avec un espace. Tout ce qui se trouve après l'espace n'est plus un paramètre de -vet docker essaie de l'analyser en tant que nom de l'image. Le correctif consiste à citer les paramètres de volume lorsque vous ne pouvez pas garantir qu'il est exempt d'espaces ou d'autres caractères spéciaux.

Lorsque vous faites cela, vous rencontrerez l'erreur suivante, "exécutable introuvable". 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 bashqui échouera presque certainement car --rmn'existera pas en tant que binaire à l'intérieur de 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 plus de détails sur ces deux erreurs et causes dans mes diapositives ici: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29

BMitch
la source
3
La diapositive 30 a résolu mon problème. J'avais un fichier .sh en cours d'exécution dans Cygwin. J'ai changé # !/bin/bash(notez l'espace entre #et !à #!/bin/bash , puis le End of Line Sequencede CRLFà LF. C'est tout ce que j'ai fait. Merci @BMitch pour le partage des diapositives.
blongho
10

J'ai eu le même problème lorsque j'ai copy-pastedla commande. Au lieu de cela, lorsque j'ai tapé la commande entière, cela a fonctionné!

Bonne chance...

Akash
la source
2
Wow, cela a vraiment aidé.
Matjag
3
Oui, pour moi, il a été --namecollé en -raison du changement automatique de l'éditeur. Merci d'avoir sauvé mon temps.
Rvy Pandey le
7

J'avais un problème similaire. Le problème que j'avais était d'avoir $(pwd)un espace là-dedans qui jetait le docker en fuite.

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

yashvier kosaraju
la source
3

J'ai rencontré ce problème alors que je n'avais pas de jeu de variables d'environnement.

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

repoet image_nameont été définis mais tagne l'étaient pas.

Cela a abouti docker push repo/image_name:.

Ce qui a jeté le docker: invalid reference format.

brandonbanks
la source
J'ai eu le même problème et je l'ai résolu en définissant la variable d'environnement manquante export tag = latest
PHZ.fi-Pharazon
1

Trouvé que l'utilisation a docker-compose configsignalé quel était le problème.

Dans mon cas, un fichier de composition de remplacement avec une entrée qui ne remplaçait rien .

user12272112
la source
0

Cela se produit également lorsque vous utilisez la composition du docker de développement comme ci-dessous, en production. Vous ne voulez pas créer d'images en production car cela brise l'idéologie des conteneurs. Nous devrions déployer des images:

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

Modifiez cela pour utiliser l'image construite:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
Stephen
la source