Encontrei este erro do Docker com um dos meus projetos:
invalid reference format: repository name must be lowercase
Quais são as várias causas para esta mensagem genérica?
Já descobri depois de algum esforço, então vou responder minha própria pergunta a fim de documentá-la aqui, já que a solução não surge imediatamente ao fazer uma pesquisa na web e também porque essa mensagem de erro não descreve o problema direto que o Docker encontra.
docker
docker-compose
HostedMetrics.com
fonte
fonte
Respostas:
Uma "referência" no docker é um ponteiro para uma imagem. Pode ser um nome de imagem, um ID de imagem, incluir um servidor de registro no nome, usar uma tag sha256 para fixar a imagem e qualquer outra coisa que possa ser usada para apontar para a imagem que você deseja executar.
A
invalid reference format
mensagem de erro significa que o docker não pode converter a string fornecida em uma imagem. Este pode ser um nome inválido ou pode ser de um erro de análise anterior nadocker run
linha de comando, se é assim que você executa a imagem. Com um arquivo de composição, se você expandir uma variável no nome da imagem, essa variável pode não ser expandida corretamente.Com a
docker run
linha de comando, isso geralmente resulta em não citar parâmetros com espaços e confundir a ordem da linha de comando. A linha de comando é ordenada como:O erro mais comum ao passar args para a execução é um mapeamento de volume expandindo um nome de caminho que inclui um espaço nele, e não citando o caminho ou escapando do espaço. Por exemplo
E a correção é tão fácil quanto:
fonte
Deixe-me enfatizar que o Docker nem mesmo permite caracteres mistos.
Boa:
docker build -t myfirstechoimage:0.1 .
Mau:
docker build -t myFirstEchoImage:0.1 .
fonte
tinha um espaço no diretório de trabalho atual e usign
$(pwd)
para mapear volumes. Não gosta de espaços em nomes de diretório.fonte
$(pwd)
entre aspas e funcionou.No meu caso era o
-e
antes dos parâmetros para o mysql dockerVerifique também se há espaços em branco ausentes
fonte
-e
uma das variáveis de ambiente anteriores.No meu caso, o nome da imagem definido em
docker-compose.yml
letras maiúsculas. O fato de a mensagem de erro mencionada emrepository
vez deimage
não ajudar a descrever o problema e demorar um pouco para descobrir.fonte
FROM bla:bla AS BUILD
falhou.FROM bla:bla AS build
foi OK Thx!No meu caso o problema estava no arranjo dos parâmetros. Inicialmente eu tinha
--name
parâmetros após parâmetros de ambiente e depois volume eattach_dbs
parâmetros, e imagem no final do comando como abaixo.Depois de reorganizar os parâmetros como abaixo, tudo funcionou bem (basicamente colocando o
--name
parâmetro seguido do nome da imagem).fonte
No MacOS, quando você estiver trabalhando em uma unidade iCloud, seu $ PWD conterá um diretório "Documentos móveis". Parece não gostar do espaço!
Como solução alternativa, copiei meu projeto para a unidade local onde não há espaço no caminho para a pasta do meu projeto.
Não vejo uma maneira de contornar a alteração do caminho padrão para o iCloud, que é
~/Library/Mobile Documents/com~apple~CloudDocs
O espaço no caminho em "Documentos móveis" parece ser o que o docker run não gosta.
fonte
Mobile\ Documents
Substituindo
image: ${DOCKER_REGISTRY}notificationsapi
porimage:notificationsapi
ouimage: ${docker_registry}notificationsapi
em docker-compose.yml resolveu o problemaarquivo com erro
arquivo sem erro
Acho que o erro foi devido a letras não minúsculas
fonte
Para mim, o problema era com o espaço no mapeamento de volume que não escapou. O trabalho jenkins que estava executando o comando docker run tinha um espaço e, como resultado, o mecanismo docker não foi capaz de entender o comando docker run.
fonte
Na verdade, o registro docker a partir de hoje (sha
2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305
) não controla caminhos que contêm caracteres em maiúsculas. Esta é obviamente uma escolha de design ruim, provavelmente devido ao desejo de manter a compatibilidade com certos sistemas operacionais que não distinguem maiúsculas de minúsculas no nível do arquivo (ou seja, janelas ).Se alguém autenticar para um escopo e tentar buscar um repositório inexistente com todas as letras minúsculas, a saída será
No entanto, se alguém tentar fazer isso com um componente em maiúsculas, apenas 404 será retornado:
fonte
às vezes você perde o sinalizador -e enquanto vários env vars específicos em linha
por exemplo, ruim:
docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
Boa:
docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
fonte
No
reference
Docker é o que aponta para uma imagem. Isso pode ser em um registro remoto ou no registro local. Deixe-me descrever a mensagem de erro primeiro e depois mostrar as soluções para isso.Isso significa que a referência que usamos não é um formato válido. Isso significa que a referência (ponteiro) que usamos para identificar uma imagem é inválida. Geralmente, isso é seguido por uma descrição como segue. Isso tornará o erro muito mais claro.
Isso significa que a referência que estamos usando não deve ter letras maiúsculas. Tente executar
docker run Ubuntu
( errado ) vsdocker run ubuntu
( correto ). O Docker não permite caracteres maiúsculos como referência de imagem. Etapas de solução de problemas simples.1) Dockerfile contém letras maiúsculas como imagens.
2) Nome da imagem definido no docker-compose.yml tinha letras maiúsculas
3) Se você estiver usando Jenkins ou GoCD para implantar seu contêiner do docker, verifique o comando run, se o nome da imagem inclui uma letra maiúscula.
Leia este documento escrito especificamente para esse erro.
fonte
Eu tive o mesmo erro e, por algum motivo, ele parece ter sido causado por letras maiúsculas no trabalho do Jenkins que executou o
docker run
comando.fonte
Isso está acontecendo por causa dos espaços no diretório de trabalho atual que vieram
$(pwd)
para os volumes do mapa. Então, eu usei em seudocker-compose
lugar.O
docker-compose.yml
arquivo.fonte
"docker build -f Dockerfile -t SpringBoot-Docker." Como na recomendação acima, estamos criando um arquivo de imagem para o docker container. elogio diz criar arquivo de uso de imagem ( -f referir-se ao arquivo docker ) e -t para o destino do arquivo de imagem que iremos enviar para o docker. a "." representa o diretório atual
solução para o problema acima: forneça o nome da imagem alvo em letras minúsculas
fonte
O Docker pode construir imagens automaticamente lendo as instruções de um Dockerfile. Um Dockerfile é um documento de texto que contém todos os comandos que um usuário pode chamar na linha de comando para montar uma imagem. exemplo: FROM python: 3.7-alpine O 'python' deve estar em minúsculas
fonte
No meu caso, eu estava tentando executar o postgres por meio do docker. Inicialmente eu estava funcionando como:
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
Eu estava faltando -e após cada variável de ambiente. Alterar o comando acima para o abaixo funcionou
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
fonte
Gostaria que a mensagem de erro gerasse a string do problema. Eu estava recebendo isso devido a um problema estranho de copiar e colar de um comando "docker run". Um caractere semelhante a um espaço estava sendo usado antes do repo e do nome da imagem.
fonte
A maioria das respostas acima não funcionou para o meu caso, portanto, documentarei isso, caso alguém considere útil. A primeira linha do dockerfile
FROM node:10
para o meu caso, a palavra nó não deve ser maiúscula, ou sejaFROM NODE:10
. Eu fiz essa mudança e funcionou.fonte
No meu caso, DockerFile continha o nome da imagem em letras maiúsculas e não em letras minúsculas.
Linha anterior em meu DockerFile
e quando mudei acima para
FROM centos
, funcionou sem problemas.fonte
No meu caso, eu tinha um
--env
switch simples , ou seja, um sem um nome ou valor de variável real, por exemplo:fonte
Tente usar caracteres minúsculos em seu DockerFile
Por exemplo, use:
ao invés de
fonte