docker: formato di riferimento non valido


104

Sto seguendo questo tutorial: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

e usano docker. Quando ho provato a eseguire docker (all'interno dello script run.sh):

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

Ho ricevuto l'errore:

docker: invalid reference format.

Ho passato 2 ore e non riesco davvero a capire cosa c'è che non va. Ogni idea è davvero apprezzata.


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

5
Come hanno menzionato @TarunLalwani e @Oleg, dovrai spostare il --rme -ittra rune il nome dell'immagine. Tuttavia, questo non spiegherà il messaggio di errore. Hai controllato se i caratteri del nome dell'immagine non hanno codifiche speciali o maiuscole? Copia e incolla dal tuo snippet funziona per me, mentre docker run --rm foo! bashstampa lo stesso errore del tuo.
gesellix

3
considerando di pubblicare una risposta a questo così è più facile da trovare per il prossimo ragazzo
lloiacono

4
Cita sempre le espansioni del dollaro con virgolette doppie, a meno che tu non voglia veramente dividere la stringa in parole. Qui, usa "$(pwd)"(forma moderna di "`pwd`"). Il tuo comando diventa docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon

1
@gesellix grazie. I comandi di copia-incolla dai manuali non dovrebbero essere eseguiti in primo luogo quando si apprendono cose nuove, a parte il fatto che può causare un dolore inaspettato quando viene coinvolto un subdolo simbolo danneggiato.
Meno male

Risposte:


88

In PowerShell dovresti usare ${pwd}vs$(pwd)


7
QUESTO è ciò che mi ha fatto sbattere la testa contro il muro (a volte 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 truecosa c'è di sbagliato nel mio comando? Inoltre sta dando lo stesso errore.
paul

Grazie mille!
Andrew Brennan

45

Il primo argomento dopo "run" che non è un flag o un parametro di un flag viene analizzato come un nome di immagine. Quando l'analisi fallisce, ti dice che il formato di riferimento, noto anche come nome immagine (ma potrebbe essere un ID immagine, un'immagine bloccata o un'altra sintassi) non è valido. Al tuo comando:

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

Il nome dell'immagine "supervisely_anpr" è valido, quindi è necessario guardare prima nel comando. In questo caso, è molto probabile che l'errore pwdprovenga dall'output di un percorso con uno spazio. Tutto ciò che segue lo spazio non è più un parametro -ve docker cerca di analizzarlo come nome dell'immagine. La soluzione consiste nel citare i parametri del volume quando non è possibile garantire che sia privo di spazi o altri caratteri speciali.

Quando lo fai, incontrerai il prossimo errore, "eseguibile non trovato". Tutto ciò che segue il nome dell'immagine viene analizzato come comando da eseguire all'interno del contenitore. Nel tuo caso, proverà a eseguire il comando --rm -it bashche quasi sicuramente fallirà poiché --rmnon esisterà come binario all'interno della tua immagine. È necessario riordinare i parametri per risolverlo:

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

Ho qualche dettaglio in più su questi due errori e cause nelle mie diapositive qui: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
La diapositiva 30 ha risolto il mio problema. Avevo un file .sh in esecuzione in Cygwin. Ho cambiato # !/bin/bash(nota lo spazio tra #e !a #!/bin/bash e poi il End of Line Sequenceda CRLFa LF. È tutto quello che ho fatto. Grazie @BMitch per la condivisione delle diapositive.
blongho

10

Ho avuto lo stesso problema quando ho ricevuto copy-pastedil comando. Invece, quando ho digitato l'intero comando, ha funzionato!

In bocca al lupo...


2
Wow, questo effettivamente ha aiutato.
Matjag

3
Sì, per me è stato --nameincollato a -causa del cambio automatico dell'editor. Grazie mi hai risparmiato tempo.
Rvy Pandey,

7

Ho avuto un problema simile. Il problema che stavo avendo era $(pwd)uno spazio lì dentro che lanciava Docker run off.

Cambia il nome della directory per non avere spazi lì e dovrebbe funzionare se questo è il problema


3

Mi sono imbattuto in questo problema quando non avevo impostato una variabile di ambiente.

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

repoed image_nameerano definiti ma tagnon lo erano.

Ciò ha provocato docker push repo/image_name:.

Che ha lanciato il file docker: invalid reference format.


Ho avuto lo stesso problema e l'ho risolto impostando il tag di esportazione della variabile di ambiente mancante = latest
PHZ.fi-Pharazon

1

Ho scoperto che l'utilizzo ha docker-compose configriportato qual era il problema.

Nel mio caso, un file di composizione di sostituzione con una voce che non sovrascriveva nulla .


0

Ciò accade anche quando si utilizza la finestra mobile di sviluppo compose come di seguito, in produzione. Non vuoi costruire immagini in produzione perché ciò rompe l'ideologia dei contenitori. Dovremmo distribuire immagini:

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

Cambia quello per usare l'immagine costruita:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.