Ran dans cette erreur Docker avec l'un de mes projets:
invalid reference format: repository name must be lowercase
Quelles sont les différentes causes de ce message générique?
Je l'ai déjà compris après quelques efforts, je vais donc répondre à ma propre question afin de la documenter ici car la solution ne vient pas tout de suite lors d'une recherche sur le Web et aussi parce que ce message d'erreur ne décrit pas le problème direct que rencontre Docker.
docker
docker-compose
HostedMetrics.com
la source
la source
Réponses:
Une «référence» dans le menu fixe est un pointeur vers une image. Il peut s'agir d'un nom d'image, d'un identifiant d'image, d'inclure un serveur de registre dans le nom, d'utiliser une balise sha256 pour épingler l'image et de tout autre élément pouvant être utilisé pour pointer vers l'image que vous souhaitez exécuter.
Le
invalid reference format
message d'erreur signifie que docker ne peut pas convertir la chaîne que vous avez fournie en image. Il peut s'agir d'un nom non valide ou d'une erreur d'analyse plus tôt dans ladocker run
ligne de commande si c'est ainsi que vous exécutez l'image. Avec un fichier de composition, si vous développez une variable dans le nom de l'image, cette variable peut ne pas se développer correctement.Avec la
docker run
ligne de commande, c'est souvent le résultat de ne pas citer les paramètres avec des espaces et de se tromper dans l'ordre de la ligne de commande. La ligne de commande est classée comme suit:L'erreur la plus courante lors du passage d'arguments à l'exécution est un mappage de volume développant un nom de chemin qui comprend un espace, et ne citant pas le chemin ou n'échappant pas à l'espace. Par exemple
Et la solution est aussi simple que:
la source
Permettez-moi de souligner que Docker n'autorise même pas les caractères mixtes.
Bien:
docker build -t myfirstechoimage:0.1 .
Mal:
docker build -t myFirstEchoImage:0.1 .
la source
avait un espace dans le répertoire de travail actuel et utilisait
$(pwd)
pour mapper les volumes. N'aime pas les espaces dans les noms de répertoire.la source
$(pwd)
entre guillemets et cela a fonctionné.Dans mon cas, c'était
-e
avant les paramètres de mysql dockerVérifiez également s'il manque des espaces blancs
la source
-e
avant une de mes variables d'environnement.Dans mon cas, le nom de l'image défini dans
docker-compose.yml
contenait des lettres majuscules. Le fait que le message d'erreur mentionnérepository
au lieu deimage
n'a pas aidé à décrire le problème et il a fallu un certain temps pour le comprendre.la source
FROM bla:bla AS BUILD
échoué.FROM bla:bla AS build
était OK Thx!Dans mon cas, le problème était dans la disposition des paramètres. Au départ, j'avais le
--name
paramètre après les paramètres d'environnement, puis le volume et lesattach_dbs
paramètres, et l'image à la fin de la commande comme ci-dessous.Après avoir réorganisé les paramètres comme ci-dessous, tout a bien fonctionné (en gros, mettre le
--name
paramètre suivi du nom de l'image).la source
Sur MacOS lorsque vous travaillez sur un lecteur iCloud, votre $ PWD contiendra un répertoire "Documents mobiles". Il ne semble pas aimer l'espace!
Pour contourner le problème, j'ai copié mon projet sur un lecteur local où il n'y a pas d'espace dans le chemin d'accès à mon dossier de projet.
Je ne vois pas de moyen de contourner le changement du chemin par défaut vers iCloud qui est
~/Library/Mobile Documents/com~apple~CloudDocs
L'espace dans le chemin dans "Documents mobiles" semble être ce que l'exécution de docker n'aime pas.
la source
Mobile\ Documents
Remplacer
image: ${DOCKER_REGISTRY}notificationsapi
parimage:notificationsapi
ouimage: ${docker_registry}notificationsapi
dans docker-compose.yml résout le problèmefichier avec erreur
fichier sans erreur
Donc, je pense que l'erreur était due à des lettres non minuscules qu'il avait
la source
Pour moi, le problème était avec l'espace dans le mappage de volume qui n'a pas été échappé. Le travail jenkins qui exécutait la commande docker run contenait un espace et par conséquent, le moteur docker n'était pas en mesure de comprendre la commande docker run.
la source
En effet, le registre docker à ce jour (sha
2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305
) ne gère pas les chemins contenant des caractères majuscules. C'est évidemment un mauvais choix de conception, probablement dû à la volonté de maintenir la compatibilité avec certains systèmes d'exploitation qui ne distinguent pas la casse au niveau du fichier (ie, Windows ).Si l'on s'authentifie pour une portée et tente d'extraire un référentiel non existant avec toutes les minuscules, la sortie est
Cependant, si l'on essaie de faire cela avec un composant majuscule, seul 404 est renvoyé:
la source
parfois vous manquez l'indicateur -e alors que plusieurs variables d'environnement spécifiques sont en ligne
par exemple mauvais:
docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
bien:
docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
la source
Un
reference
dans Docker est ce qui pointe vers une image. Cela peut être dans un registre distant ou dans le registre local. Permettez-moi de décrire d'abord le message d'erreur, puis de montrer les solutions pour cela.Cela signifie que la référence que nous avons utilisée n'est pas un format valide. Cela signifie que la référence (pointeur) que nous avons utilisée pour identifier une image n'est pas valide. Généralement, ceci est suivi d'une description comme suit. Cela rendra l'erreur beaucoup plus claire.
Cela signifie que la référence que nous utilisons ne doit pas avoir de lettres majuscules. Essayez d'exécuter
docker run Ubuntu
( faux ) vsdocker run ubuntu
( correct ). Docker n'autorise pas les caractères majuscules comme référence d'image. Étapes de dépannage simples.1) Dockerfile contient des lettres majuscules sous forme d'images.
2) Le nom de l'image défini dans le fichier docker-compose.yml avait des lettres majuscules
3) Si vous utilisez Jenkins ou GoCD pour déployer votre conteneur docker, veuillez vérifier la commande run, si le nom de l'image comprend une majuscule.
Veuillez lire ce document rédigé spécifiquement pour cette erreur.
la source
J'ai eu la même erreur, et pour une raison quelconque, cela semble avoir été causé par des lettres majuscules dans le travail Jenkins qui exécutait la
docker run
commande.la source
Cela se produit en raison des espaces dans le répertoire de travail actuel provenant
$(pwd)
des volumes de carte. Donc, j'ai utilisé à ladocker-compose
place.Le
docker-compose.yml
dossier.la source
"docker build -f Dockerfile -t SpringBoot-Docker." Comme dans la recommandation ci-dessus, nous créons un fichier image pour le conteneur Docker. commend dit créer un fichier d'utilisation d'image ( -f se réfère au fichier docker ) et -t pour la cible du fichier image que nous allons pousser vers docker. le "." représente le répertoire courant
solution pour le problème ci-dessus: indiquez le nom de l'image cible en minuscules
la source
Docker peut créer des images automatiquement en lisant les instructions à partir d'un Dockerfile. Un Dockerfile est un document texte qui contient toutes les commandes qu'un utilisateur peut appeler sur la ligne de commande pour assembler une image. exemple: FROM python: 3.7-alpine Le 'python' doit être en minuscules
la source
Dans mon cas, j'essayais d'exécuter postgres via docker. Au départ, je courais en tant que:
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
Il me manquait -e après chaque variable d'environnement. Changer la commande ci-dessus en celle ci-dessous a fonctionné
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
la source
Je souhaite que le message d'erreur affiche la chaîne de problème. J'obtenais ceci en raison d'un problème étrange de copier-coller d'une commande "docker run". Un caractère de type espace était utilisé avant le nom du référentiel et de l'image.
la source
La plupart des réponses ci-dessus n'ont pas fonctionné pour mon cas, donc je vais documenter cela au cas où quelqu'un trouverait cela utile. La première ligne du fichier dockerfile
FROM node:10
pour mon cas, le mot node ne doit pas être en majuscule, c'est-à-direFROM NODE:10
. J'ai fait ce changement et cela a fonctionné.la source
Dans mon cas, DockerFile contenait le nom de l'image en casse mixte au lieu de minuscules.
Ligne précédente dans mon DockerFile
et quand j'ai changé ci-dessus
FROM centos
, cela a fonctionné sans problème.la source
Dans mon cas, j'avais un
--env
switch nu , c'est-à-dire sans nom de variable ni valeur réelle, par exemple:la source
Essayez d'utiliser des caractères minuscules dans votre DockerFile
Par exemple, utilisez:
au lieu de
la source