docker: formato de referencia no válido

104

Estoy siguiendo este tutorial: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

y usan Docker. Cuando intenté ejecutar Docker (dentro del script run.sh):

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

Me sale el error:

docker: invalid reference format.

Pasé 2 horas y realmente no puedo entender qué pasa. Cualquier idea muy apreciada.

ai2016
fuente
3
Prueba estodocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani
5
Como @TarunLalwani y @Oleg mencionaron, necesitará mover --rmy -itentre runel nombre de la imagen. Sin embargo, eso no explicará el mensaje de error. ¿Verificó si los caracteres del nombre de la imagen no tienen ninguna codificación especial o mayúsculas? Copiar y pegar de su fragmento funciona para mí, mientras que docker run --rm foo! bashimprime el mismo error que el suyo.
gesellix
3
considerando publicar una respuesta a esto para que sea más fácil de encontrar para el próximo chico
lloiacono
4
Siempre haga doble cotización en las expansiones en dólares a menos que realmente quiera dividir la cadena en palabras. Aquí, use "$(pwd)"(forma moderna de "`pwd`"). Tu comando se convierte en docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon
1
@gesellix gracias. Los comandos de copiar y pegar de los manuales no se deben hacer en primer lugar cuando se aprenden cosas nuevas, aparte de que puede causar un dolor inesperado cuando se involucra algún símbolo corrupto y furtivo. Menos mal que vi tu comentario antes de pasar dos horas o medio día en tal "error" ^ _ ^
Den Drobiazko

Respuestas:

88

En powershell deberías usar ${pwd}vs$(pwd)

Levon Petrosyan
fuente
7
Esto es lo que hizo que me golpeo la cabeza contra la pared (a veces odio 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 true¿Qué pasa con mi comando? También está dando el mismo error.
paul
Muchas gracias!
Andrew Brennan
45

El primer argumento después de "ejecutar" que no es un indicador o parámetro de un indicador se analiza como un nombre de imagen. Cuando ese análisis falla, le dice que el formato de referencia, también conocido como el nombre de la imagen (pero podría ser una identificación de imagen, una imagen fija u otra sintaxis) no es válido. En tu mando:

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

El nombre de la imagen "supervisely_anpr" es válido, por lo que debe buscar antes en el comando. En este caso, lo más probable es que el error se pwddeba a la salida de una ruta con un espacio. Todo lo que aparece después del espacio ya no es un parámetro -vy la ventana acoplable intenta analizarlo como el nombre de la imagen. La solución es citar los parámetros de volumen cuando no puede garantizar que esté libre de espacios u otros caracteres especiales.

Cuando lo haga, encontrará el siguiente error, "ejecutable no encontrado". Todo lo que sigue al nombre de la imagen se analiza como el comando para ejecutarse dentro del contenedor. En su caso, intentará ejecutar el comando --rm -it bashque casi con seguridad fallará ya --rmque no existirá como un binario dentro de su imagen. Necesita reordenar los parámetros para resolver eso:

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

Tengo algunos detalles más sobre estos dos errores y causas en mis diapositivas aquí: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29

BMitch
fuente
3
La diapositiva 30 resolvió mi problema. Tenía un archivo .sh ejecutándose en Cygwin. Cambié # !/bin/bash(observe el espacio entre #y !a #!/bin/bash y luego End of Line Sequencede CRLFa LF. Eso fue todo lo que hice. Gracias @BMitch por compartir las diapositivas.
blongho
10

Tuve el mismo problema cuando di copy-pastedel comando. En cambio, cuando escribí el comando completo, ¡funcionó!

Buena suerte...

Akash
fuente
2
Vaya, esto realmente ayudó.
Matjag
3
Sí, para mí se --namepegó -debido a que el editor lo cambió automáticamente. Gracias, me salvaste el tiempo.
Rvy Pandey
7

Tuve un problema similar. El problema que estaba teniendo era que $(pwd)tenía un espacio allí que arrojaba la ventana acoplable.

Cambie el nombre del directorio para que no tenga espacios allí, y debería funcionar si este es el problema

yashvier kosaraju
fuente
3

Me encontré con este problema cuando no tenía un conjunto de variables de entorno.

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

repoy image_namese definieron pero tagno lo fueron.

Esto resultó en docker push repo/image_name:.

Que arrojó el docker: invalid reference format.

brandonbanks
fuente
Tuve el mismo problema y lo solucioné configurando la etiqueta de exportación de variable de entorno faltante = latest
PHZ.fi-Pharazon
1

Descubrí que el uso docker-compose configinformó cuál era el problema.

En mi caso, un archivo de redacción de anulación con una entrada que no anulaba nada .

usuario12272112
fuente
0

Esto también sucede cuando usa la ventana acoplable de desarrollo como la siguiente, en producción. No desea crear imágenes en producción, ya que eso rompe la ideología de los contenedores. Deberíamos implementar imágenes:

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

Cambie eso para usar la imagen construida:

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