docker : 잘못된 참조 형식


104

이 튜토리얼을 따르고 있습니다 : https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

그리고 그들은 도커를 사용합니다. docker를 실행하려고 할 때 (run.sh 스크립트 내부) :

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

오류가 발생했습니다.

docker: invalid reference format.

나는 2 시간을 보냈고 무엇이 잘못되었는지 정말로 이해할 수 없다. 어떤 아이디어라도 정말 감사합니다.


3
이 시도docker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani

5
@TarunLalwani 및 @Oleg가 언급했듯이 --rm-it중간 run및 이미지 이름 을 이동해야합니다 . 그래도 오류 메시지는 설명되지 않습니다. 이미지 이름 문자에 특수 인코딩 또는 대문자가 없는지 확인 했습니까? 귀하의 스 니펫에서 복사 및 붙여 넣기는 저에게 효과적이지만 docker run --rm foo! bash귀하와 동일한 오류 를 인쇄합니다.
gesellix

3
이 때문에 다음 사람을 위해 쉽게 찾을 수 있습니다에 대한 답변을 게시 고려
lloiacono

4
문자열을 단어로 나누고 싶지 않으면 항상 큰 따옴표 달러 확장을 사용하십시오. 여기에서 "$(pwd)"(현대적인 형태의 "`pwd`")를 사용하십시오. 명령은 docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon

1
@gesellix 감사합니다. 매뉴얼의 복사-붙여 넣기 명령은 새로운 것을 배울 때 처음부터 수행되어서는 안되며, 교활하고 손상된 기호가 관련 될 때 예기치 않은 고통을 가져올 수 있다는 점을 제외하고는 말입니다. 그런 "오류"에 대해 2 시간 또는 반나절을 보내기 전에 귀하의 의견을 봤습니다. ^ _ ^
Den Drobiazko 19

답변:


88

powershell에서는 ${pwd}vs 를 사용해야합니다.$(pwd)


7
이것이 제가 벽에 머리를
부딪 히게 한 이유입니다

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내 명령에 무슨 문제가 있습니까? 또한 동일한 오류를 제공합니다.
paul

정말 고맙습니다!
Andrew Brennan

45

플래그 또는 플래그에 대한 매개 변수가 아닌 "실행"다음의 첫 번째 인수는 이미지 이름으로 구문 분석됩니다. 해당 구문 분석이 실패하면 참조 형식, 일명 이미지 이름 (이미지 ID, 고정 된 이미지 또는 기타 구문 일 수 있음)이 잘못되었음을 알려줍니다. 명령에서 :

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

이미지 이름 "supervisely_anpr"이 유효하므로 명령의 앞부분을 살펴 봐야합니다. 이 경우 오류는 pwd공백이있는 경로 를 출력 할 때 발생할 가능성이 높습니다 . 공백 뒤의 모든 것은 더 이상 매개 변수가 아니며 -vdocker는이를 이미지 이름으로 구문 분석하려고합니다. 수정 사항은 공백이나 기타 특수 문자가 없음을 보장 할 수없는 경우 볼륨 매개 변수를 인용하는 것입니다.

그렇게하면 다음 오류 "실행 파일을 찾을 수 없음"이 발생합니다. 이미지 이름 뒤의 모든 것은 컨테이너 내부에서 실행되는 명령으로 구문 분석됩니다. 귀하의 경우에는 이미지 내부에 바이너리로 존재 --rm -it bash하지 않기 때문에 거의 확실히 실패 할 명령을 실행하려고 시도합니다 --rm. 이를 해결하려면 매개 변수의 순서를 변경해야합니다.

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

이 두 가지 오류 및 원인에 대한 자세한 내용은 다음 슬라이드에 있습니다. https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
슬라이드 (30)는 해결 내 문제. Cygwin에서 .sh 파일을 실행했습니다. 나는 변경 # !/bin/bash(통지 사이의 공간 #!#!/bin/bash 당시와 End of Line Sequence에서 CRLFLF... 공유 슬라이드에 대한 그게 다였다 내가 한 감사 @BMitch을
blongho

10

copy-pasted명령 할 때도 같은 문제가 발생했습니다 . 대신 전체 명령을 입력했을 때 작동했습니다!

행운을 빕니다...


2
와, 실제로 도움이되었습니다.
Matjag

3
네, 편집자가 자동으로 변경했기 때문에 --name붙여 넣었 -습니다. 시간을 절약 해주셔서 감사합니다.
Rvy Pandey

7

비슷한 문제가있었습니다. 내가 가지고 있던 문제는 $(pwd)도커를 던지는 공간이 있습니다.

공백이 없도록 디렉토리 이름을 변경하십시오. 이것이 문제인 경우 작동합니다.


3

환경 변수를 설정하지 않았을 때이 문제가 발생했습니다.

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

repo그리고 image_name정의되어 있지만했다 tag아니었다.

이로 인해 docker push repo/image_name:.

던진 docker: invalid reference format.


나는 같은 문제가 있었고 누락 된 환경 변수 export tag = latest
PHZ.fi-Pharazon

1

사용 docker-compose config하여 문제가 무엇인지보고했습니다.

제 경우에는 재정의가 아무것도 재정의하지 않는 항목으로 파일을 작성 합니다 .


0

이것은 프로덕션에서 아래와 같이 개발 도커 작성을 사용할 때도 발생합니다. 컨테이너의 이념을 깨뜨리기 때문에 프로덕션에서 이미지를 구축하고 싶지는 않습니다. 이미지를 배포해야합니다.

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

빌드 된 이미지를 사용하도록 변경하십시오.

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.