Docker: неверный ссылочный формат

Я следую этому руководству: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

и они используют докер. Когда я попытался запустить докер (внутри run.sh script):

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 часа, и я не могу понять, что случилось. Любая идея действительно ценится.

Ответ 1

В powershell вы должны использовать ${pwd} vs $(pwd)

Ответ 2

Первый аргумент после "запуска", который не является флагом или параметром для флага, анализируется как имя изображения. Когда этот синтаксический анализ завершается неудачно, он сообщает вам, что ссылочный формат, то есть имя изображения (но может быть идентификатором изображения, закрепленным изображением или другим синтаксисом), недопустим. В вашей команде:

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

Имя изображения "supervisely_anpr" является допустимым, поэтому вам нужно посмотреть ранее в команде. В этом случае ошибка, скорее всего, pwd с pwd пути с пробелом в pwd. Все после пробела больше не является параметром для -v и докер пытается проанализировать его как имя изображения. Исправление заключается в указании параметров объема, если вы не можете гарантировать, что в нем нет пробелов или других специальных символов.

Когда вы это сделаете, вы столкнетесь со следующей ошибкой "Исполняемый файл не найден". Все после имени изображения анализируется как команда для запуска внутри контейнера. В вашем случае он попытается выполнить команду --rm -it bash которая почти наверняка потерпит неудачу, поскольку --rm будет существовать в виде двоичного --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

У меня была похожая проблема. У меня возникла проблема: в $(pwd) есть пробел, из-за которого разбрасывался докер.

Измените имя каталога, чтобы в нем не было пробелов, и оно должно работать, если это проблема

Ответ 4

У меня такая же проблема. Я пытался написать bash-скрипт для запуска моего док-контейнера на моем удаленном сервере, но столкнулся с тем же docker: invalid reference format. ошибок docker: invalid reference format.

old-start-container.sh

#!/bin/bash
docker run -p 80:5000 'dockerrepo/imagename:tag'

Вот как я это исправил. Я использовал подстановку команд bash, чтобы заставить команду docker работать правильно.

new-start-container.sh

#!/bin/bash
$(docker run -p 80:5000 'dockerrepo/imagename:tag')

Ответ 5

Это также происходит, когда вы используете docker для разработки, как описано ниже, в производстве. вы не хотите создавать изображения в производстве, поскольку это нарушает идеологию контейнеров. Мы должны развертывать изображения:

  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"

Ответ 6

У меня была та же проблема, когда я copy-pasted командовал. Вместо этого, когда я набрал всю команду, это сработало!

Удачи...