Попался в эту ошибку Docker с одним из моих проектов:
invalid reference format: repository name must be lowercase
Каковы различные причины этого общего сообщения?
Я уже понял это после некоторых усилий, поэтому я собираюсь ответить на свой вопрос, чтобы задокументировать его здесь, поскольку решение не появляется сразу при выполнении веб-поиска, а также потому, что это сообщение об ошибке не описывает прямая проблема, с которой сталкивается Докер.
docker
docker-compose
HostedMetrics.com
источник
источник
Ответы:
«Ссылка» в докере - это указатель на изображение. Это может быть имя образа, идентификатор образа, включить в имя сервер реестра, использовать тег sha256 для закрепления образа и все остальное, что можно использовать для указания на образ, который вы хотите запустить.
Сообщение
invalid reference format
об ошибке означает, что докер не может преобразовать указанную вами строку в изображение. Это может быть недопустимое имя или это может быть из-за ошибки синтаксического анализа ранее вdocker run
командной строке, если вы запускаете образ именно так. Если в файле компоновки развернуть переменную в имени изображения, эта переменная может расширяться неправильно.В
docker run
командной строке это часто приводит к тому, что параметры не заключаются в кавычки с пробелами и неправильно порядок командной строки. Командная строка имеет следующий порядок:Наиболее распространенная ошибка при передаче аргументов в запуск - это отображение тома, расширяющее имя пути, которое включает в себя пробел, а не цитирование пути или экранирование пробела. Например
И исправить это так же просто, как:
источник
Позвольте мне подчеркнуть, что Docker не допускает даже смешанных символов.
Хороший:
docker build -t myfirstechoimage:0.1 .
Плохой:
docker build -t myFirstEchoImage:0.1 .
источник
имеет место в текущем рабочем каталоге и используется
$(pwd)
для сопоставления томов. Не любит пробелы в именах каталогов.источник
$(pwd)
в кавычки, и это сработало.В моем случае это было
-e
до параметров для mysql dockerТакже проверьте, нет ли пробелов
источник
-e
предыдущей одной из переменных среды.В моем случае имя изображения, определенное в виде
docker-compose.yml
прописных букв. Тот факт, чтоrepository
вместо сообщения об ошибке упоминаетсяimage
, не помогает описать проблему, и потребовалось время, чтобы разобраться.источник
FROM bla:bla AS BUILD
не удалось.FROM bla:bla AS build
все было в порядке, спасибо!В моем случае проблема была в расстановке параметров. Первоначально у меня был
--name
параметр после параметров среды, а затем объем иattach_dbs
параметры и изображение в конце команды, как показано ниже.После изменения параметров, как показано ниже, все работало нормально (в основном
--name
параметр, за которым следует имя изображения).источник
В MacOS, когда вы работаете на диске iCloud, ваш $ PWD будет содержать каталог «Мобильные документы». Кажется, не нравится пространство!
В качестве обходного пути я скопировал свой проект на локальный диск, где нет места в пути к моей папке проекта.
Я не вижу способа обойтись без изменения пути к iCloud по умолчанию, который
~/Library/Mobile Documents/com~apple~CloudDocs
Пробел в пути в «Мобильных документах» кажется тем, что docker run не нравится.
источник
Mobile\ Documents
Замена
image: ${DOCKER_REGISTRY}notificationsapi
сimage:notificationsapi
илиimage: ${docker_registry}notificationsapi
в Докер-compose.yml сделал решает проблемуфайл с ошибкой
файл без ошибок
Поэтому я думаю, что ошибка была связана с нестрочными буквами, которые у нее были
источник
Для меня проблема заключалась в том, что пространство в отображении тома не было экранировано. В задании jenkins, которое запускало команду docker run, было пробел, и в результате движок докеров не смог понять команду docker run.
источник
Действительно, реестр докеров на сегодняшний день (sha
2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305
) не обрабатывает пути, содержащие символы верхнего регистра. Очевидно, что это плохой выбор дизайна, вероятно, из-за желания поддерживать совместимость с определенными операционными системами, которые не различают регистр на уровне файлов (например, Windows ).Если кто-то аутентифицируется для области и пытается получить несуществующий репозиторий со всеми строчными буквами, вывод будет
Однако, если кто-то пытается сделать это с компонентом в верхнем регистре, возвращается только 404:
источник
иногда вы пропускаете флаг -e, когда в строке указано несколько переменных env
например, плохо:
docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
хороший:
docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
источник
A
reference
в Docker - это то, что указывает на изображение. Это может быть удаленный или локальный реестр. Позвольте мне сначала описать сообщение об ошибке, а затем показать решения для этого.Это означает, что использованная ссылка не является допустимым форматом. Это означает, что ссылка (указатель), которую мы использовали для идентификации изображения, недействительна. Обычно за этим следует описание. Это сделает ошибку более понятной.
Это означает, что в используемой ссылке не должно быть заглавных букв. Попробуйте запустить
docker run Ubuntu
( неправильно ) противdocker run ubuntu
( правильно ). Docker не позволяет использовать символы верхнего регистра в качестве ссылки на изображение. Простые шаги по устранению неполадок.1) Dockerfile содержит заглавные буквы в качестве изображений.
2) Имя изображения, определенное в docker-compose.yml, состояло из заглавных букв
3) Если вы используете Jenkins или GoCD для развертывания контейнера докеров, проверьте команду запуска, содержит ли имя образа заглавную букву.
Пожалуйста, прочтите этот документ, написанный специально для этой ошибки.
источник
У меня была такая же ошибка, и по какой-то причине она, похоже, была вызвана прописными буквами в задании Jenkins, которое запускало
docker run
команду.источник
Это происходит из-за пробелов в текущем рабочем каталоге, которые были созданы
$(pwd)
для томов карты. Итак, я использовалdocker-compose
вместо этого.docker-compose.yml
Файл.источник
"docker build -f Dockerfile -t SpringBoot-Docker". Как указано выше, мы создаем файл образа для контейнера докеров. commend говорит, что создать файл использования образа ( -f относится к файлу докера ) и -t для целевого файла образа, который мы собираемся отправить в докер. символ "." представляет текущий каталог
решение указанной выше проблемы: укажите имя целевого изображения в нижнем регистре
источник
Docker может создавать образы автоматически, читая инструкции из Dockerfile. Dockerfile - это текстовый документ, содержащий все команды, которые пользователь может вызвать в командной строке для сборки изображения. пример: FROM python: 3.7-alpine "python" должен быть в нижнем регистре
источник
В моем случае я пытался запустить postgres через докер. Изначально я работал как:
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password POSTGRES_USER=test_user POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
Мне не хватало -e после каждой переменной окружения. Изменение приведенной выше команды на приведенную ниже сработало
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password -e POSTGRES_USER=test_user -e POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
источник
Я хочу, чтобы сообщение об ошибке выводило строку проблемы. Я получал это из-за странной проблемы копирования и вставки команды «docker run». Пробела , как символ использовались перед именем обратного РЕПО и изображений.
источник
Большинство приведенных выше ответов не сработали в моем случае, поэтому я задокументирую это, если кто-то сочтет это полезным. Первая строка в dockerfile
FROM node:10
моего случая, слово узел не должен быть в верхнем регистре естьFROM NODE:10
. Я внес это изменение, и оно сработало.источник
В моем случае DockerFile содержал имя изображения в смешанном регистре, а не в нижнем регистре.
Предыдущая строка в моем DockerFile
и когда я изменил выше на
FROM centos
, он работал гладко.источник
В моем случае у меня был голый
--env
переключатель, то есть без фактического имени или значения переменной, например:источник
Попробуйте использовать символы нижнего регистра в вашем DockerFile
Например, используйте:
вместо того
источник