Śledzę ten samouczek: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c
i używają dockera. Kiedy próbowałem uruchomić dockera (wewnątrz skryptu run.sh):
docker run \
-p 8888:8888
-v `pwd`/../src:/src \
-v `pwd`/../data:/data -w /src supervisely_anpr \
--rm \
-it \
bash
Wyskoczył mi błąd:
docker: invalid reference format.
Spędziłem 2 godziny i naprawdę nie rozumiem, co jest nie tak. Każdy pomysł naprawdę doceniony.
docker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
--rm
i-it
w międzyczasierun
i nazwę obrazu. To jednak nie wyjaśnia komunikatu o błędzie. Czy sprawdziłeś, czy znaki nazwy obrazu nie mają żadnego specjalnego kodowania ani wielkich liter? Kopiuj i wklej z twojego fragmentu kodu działa dla mnie, adocker run --rm foo! bash
drukuje ten sam błąd, co twój."$(pwd)"
(nowoczesna forma"`pwd`"
). Twoje polecenie staje siędocker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash
.Odpowiedzi:
W PowerShell powinieneś używać
${pwd}
vs$(pwd)
źródło
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
co jest nie tak z moim poleceniem? Daje również ten sam błąd.$pwd
nie działa, co jest oczywiste.Pierwszy argument po „uruchomieniu”, który nie jest flagą ani parametrem flagi, jest analizowany jako nazwa obrazu. Gdy ta analiza nie powiedzie się, informuje, że format odniesienia, czyli nazwa obrazu (ale może to być identyfikator obrazu, przypięty obraz lub inna składnia) jest nieprawidłowy. Na Twoje polecenie:
Nazwa obrazu „supervisely_anpr” jest prawidłowa, więc należy spojrzeć wcześniej w poleceniu. W tym przypadku błąd najprawdopodobniej wynika z
pwd
wyprowadzenia ścieżki ze spacją. Wszystko, co znajduje się za spacją, nie jest już parametrem,-v
a docker próbuje przeanalizować go jako nazwę obrazu. Rozwiązaniem jest cytowanie parametrów woluminu, gdy nie można zagwarantować, że jest on wolny od spacji lub innych znaków specjalnych.Gdy to zrobisz, napotkasz następny błąd „Nie znaleziono pliku wykonywalnego”. Wszystko po nazwie obrazu jest analizowane jako polecenie do uruchomienia wewnątrz kontenera. W twoim przypadku spróbuje uruchomić polecenie,
--rm -it bash
które prawie na pewno się nie powiedzie, ponieważ nie--rm
będzie istnieć jako plik binarny w twoim obrazie. Musisz zmienić kolejność parametrów, aby rozwiązać ten problem:Mam więcej szczegółów na temat tych dwóch błędów i przyczyn na moich slajdach tutaj: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29
źródło
# !/bin/bash
(zwróć uwagę na odstęp między#
i!
do,#!/bin/bash
a potemEnd of Line Sequence
odCRLF
doLF
. To wszystko, co zrobiłem. Dzięki @BMitch za udostępnienie slajdów.Miałem ten sam problem, kiedy wydałem
copy-pasted
polecenie. Zamiast tego, kiedy wpisałem całe polecenie, zadziałało!Powodzenia...
źródło
--name
wklejony z-
powodu automatycznej zmiany edytora. Dzięki, zaoszczędziłeś mi czasu.Miałem podobny problem. Problem,
$(pwd)
który miałem, dotyczył miejsca, w którym wyrzucał spływ dokera.źródło
Napotkałem ten problem, gdy nie miałem zestawu zmiennych środowiskowych.
docker push ${repo}${image_name}:${tag}
repo
iimage_name
zostały zdefiniowane, aletag
nie zostały.Spowodowało to
docker push repo/image_name:
.Który wyrzucił
docker: invalid reference format.
źródło
docker build
nie udało mi się z tym błędemFROM ${ORG}/ci-common:${CI_COMMON_VERSION} as builder
. Okazało się, że jest to spowodowane prostą literówką w poprzednimARG CI_COMMON_VERION=2
(brakującymS
), którą skopiowałem z innego skryptu, który miał wszędzie tę literówkę i dlatego działał dobrze.Okazało się, że użycie
docker-compose config
zgłosiło problem.W moim przypadku nadpisany plik redagowania z wpisem, który niczego nie przesłaniał .
źródło
Dzieje się tak również, gdy używasz w środowisku produkcyjnym programowania docker compose, takiego jak poniżej. Nie chcesz tworzyć obrazów w produkcji, ponieważ to łamie ideologię kontenerów. Powinniśmy wdrażać obrazy:
Zmień to, aby użyć zbudowanego obrazu:
źródło