web-dev-qa-db-fra.com

Erreur Docker: format de référence non valide: le nom du référentiel doit être en minuscule

Couru 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 se présente pas immédiatement lors d'une recherche Web et parce que ce message d'erreur ne décrit pas le problème direct rencontré par Docker.

11
HostedMetrics.com

Dans mon cas, le problème était dans l'arrangement des paramètres. Initialement, j'avais le paramètre --name après les paramètres d'environnement, puis les paramètres volume et attach_dbs, ainsi qu'une image à la fin de la commande, comme ci-dessous. 

docker run -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 -v c:/temp/:c:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['c:\\temp\\TestDb.mdf','c:\\temp\\TestDb_log.ldf']}]" -d Microsoft/mssql-server-windows-express

Après avoir réorganisé les paramètres comme ci-dessous, tout a bien fonctionné (en mettant le paramètre --name suivi du nom de l'image).

docker run -d -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 Microsoft/mssql-server-windows-express -v C:/temp/:C:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['C:\\temp\\TestDb.mdf','C:\\temp\\TestDb_log.ldf']}]"
7
josip.k

avait un espace dans le répertoire de travail actuel et utilisait $(pwd) pour mapper des volumes. N'aime pas les espaces dans les noms de répertoires.

4
Colin Claverie

Une "référence" dans le menu fixe est un pointeur sur une image. Il peut s'agir d'un nom d'image, d'un identifiant d'image, d'un serveur de registre, d'une balise sha256 pour épingler l'image et de tout autre élément pouvant être utilisé pour pointer sur l'image que vous souhaitez exécuter.

Le message d'erreur invalid reference format signifie que docker ne peut pas convertir la chaîne que vous avez fournie en une image. Ce nom peut être incorrect ou provenir d'une erreur d'analyse plus tôt dans la ligne de commande docker run, 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 risque de ne pas être développée correctement.

Avec la ligne de commande docker run, il arrive souvent que les paramètres ne soient pas cotés par des espaces et que l’ordre de la ligne de commande soit erroné. La ligne de commande est classée comme suit:

docker ${args_to_docker} run ${args_to_run} image_ref ${cmd_to_exec}

L'erreur la plus courante lors du passage des arguments à l'exécution est un mappage de volume développant un nom de chemin qui inclut un espace, et ne cite pas le chemin ni ne le libère. Par exemple.

docker run -v $(pwd):/data image_ref

Et la solution est aussi simple que:

docker run -v "$(pwd):/data" image_ref
3
BMitch

Dans mon cas, le nom d'image défini dans docker-compose.yml contenait des lettres majuscules. Le fait que le message d'erreur mentionne repository au lieu de image n'aide pas à décrire le problème et qu'il a fallu un certain temps pour le résoudre.

2
HostedMetrics.com

Sur MacOS lorsque vous travaillez sur un lecteur iCloud, votre $ PWD contiendra un répertoire "Documents mobiles". Il ne semble pas aimer l'espace!

En guise de solution de contournement, j'ai copié mon projet sur un lecteur local où il n'y a pas d'espace dans le chemin d'accès au dossier de projet.

Je ne vois pas comment vous pouvez contourner le chemin d'accès par défaut à 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.

1
user279838

Permettez-moi de souligner que Docker ne permet même pas les caractères mélangés.

Bien: docker build -t myfirstechoimage:0.1 .

Mal: ​​docker build -t myFirstEchoImage:0.1 .

0
Z3d4s

J'ai eu la même erreur, et pour une raison quelconque, cela semble avoir été provoqué par des lettres majuscules dans le travail Jenkins qui a exécuté la commande docker run

0
kenneho

En remplaçant image: ${DOCKER_REGISTRY}notificationsapi Par image:notificationsapi Ou image: ${docker_registry}notificationsapiin, docker-compose.yml a résolu le problème

fichier avec erreur

  version: '3.4'

services:
  notifications.api:
    image: ${DOCKER_REGISTRY}notificationsapi
    build:
      context: .
      dockerfile: ../Notifications.Api/Dockerfile

fichier sans erreur 

version: '3.4'

services:
 notifications.api:
    image: ${docker_registry}notificationsapi
    build:
      context: .
      dockerfile: ../Notifications.Api/Dockerfile

Donc, je pense que l'erreur était due aux lettres non minuscules qu'il avait

0
nandithakw

Pour moi, le problème était lié à l'espace de mappage de volume qui n'a pas été échappé. Le travail Jenkins qui exécutait la commande d'exécution du menu fixe avait un espace et par conséquent, le moteur du menu fixe n'était pas en mesure de comprendre la commande d'exécution du menu fixe.

0
Vipul Malgotra

Cela est dû aux espaces du répertoire de travail actuel provenant de $(pwd) pour les volumes de carte. Donc, j'ai utilisé docker-compose à la place.

Le fichier docker-compose.yml.

version: '3'
services:
  react-app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - /app/node_modules
      - .:/app
0
Ritwik

En effet, le registre de menu fixe à ce jour (sha 2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305) ne gère pas les chemins contenant des caractères majuscules. Il s’agit bien évidemment d’un choix de conception peu judicieux, probablement dû à la volonté de rester compatible avec certains systèmes d’exploitation qui ne font pas la distinction entre les casse au niveau du fichier (par exemple, windows ). 

Si on s'authentifie pour une étendue et essaie d'extraire un référentiel non existant avec toutes les minuscules, la sortie est 

(auth step not shown)
curl -s -H "Authorization: Bearer $TOKEN" -X GET https://$LOCALREGISTRY/v2/test/someproject/tags/list
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"test/someproject","Action":"pull"}]}]}

Toutefois, si l’on essaie de le faire avec un composant majuscule, seul le code 404 est renvoyé:

(authorization step done but not shown here)
$ curl -s -H "Authorization: Bearer $TOKEN" -X GET https://docker.uibk.ac.at:443/v2/test/Someproject/tags/list

404 page not found
0
Otheus