Docker hatası: geçersiz başvuru biçimi: kod deposu adı küçük harf olmalıdır


92

Projelerimden birinde bu Docker hatasıyla karşılaştım:

invalid reference format: repository name must be lowercase

Bu genel mesajın çeşitli nedenleri nelerdir?

Biraz çaba gösterdikten sonra zaten anladım, bu yüzden burada belgelemek için kendi sorumu cevaplayacağım çünkü bir web araması yaparken çözüm hemen gelmiyor ve ayrıca bu hata mesajı tanımlamıyor Docker'ın karşılaştığı doğrudan sorun.


BMitch'in cevabında açıkladığı gibi, bu hata mesajındaki "referans" bir görüntünün tanımlayıcısıdır. Dolayısıyla, bir resmi işaret etmek için kullandığınız değerin biçimi geçersizdir. BMitch'in tam açıklamasını okuyun: stackoverflow.com/a/52818152/336694
HostedMetrics.com

Yanıtlar:


87

Docker'daki bir "başvuru", bir görüntünün işaretçisidir. Bu bir görüntü adı, bir görüntü kimliği olabilir, adına bir kayıt defteri sunucusu içerebilir, görüntüyü sabitlemek için bir sha256 etiketi ve çalıştırmak istediğiniz görüntüyü işaret etmek için kullanılabilecek başka herhangi bir şey olabilir.

invalid reference formatHata mesajı araçları liman işçisi bir görüntüye sağladık dizeyi dönüştürmek olamaz. Bu geçersiz bir ad olabilir veya docker rungörüntüyü böyle çalıştırıyorsanız komut satırında daha önceki bir ayrıştırma hatasından kaynaklanıyor olabilir . Oluşturma dosyasıyla, görüntü adındaki bir değişkeni genişletirseniz, bu değişken doğru şekilde genişlemeyebilir.

İle docker runkomut satırından, bu genellikle boşluklarla parametreleri alıntı ve komut satırı sırasını karıştırıyorsun değil sonucudur. Komut satırı şu şekilde sıralanmıştır:

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

Çalıştırmaya argümanlar iletmede en yaygın hata, içinde bir boşluk bulunan bir yol adını genişleten ve yolu alıntı yapmayan veya boşluktan kaçmayan bir birim eşlemesidir. Örneğin

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

Ve düzeltme şu kadar kolaydır:

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

3
"Docker run komut satırında, bu genellikle parametrelerin boşluklarla alıntılanmamasına ve komut satırının sırasının yanlış olmasına neden olur" Bu gerçekten yardımcı oldu
user979899

2 yıl sonra bile son derece yararlı bir gönderi!
Coğrafi

Mükemmel çalıştı. Teşekkürler!
Igor Melão

25

Docker'ın karışık karakterlere bile izin vermediğini vurgulamama izin verin.

İyi: docker build -t myfirstechoimage:0.1 .

Kötü: docker build -t myFirstEchoImage:0.1 .


1
Vay canına, bu çok fazla çaba harcadı!
meraklı

1
Docker imajını oluşturmak için SpringBoot projesinde "spotify" maven bağımlılığını kullanıyorum ve son birkaç saatten beri sorunu anlamakta zorlanıyordum. Projenin adı (büyük harfleri içerir) sorun haline gelecektir!
Abhishek Aggarwal

18

Benim durumumda -emysql docker için parametreler önceydi

docker run --name mysql-standalone -e MYSQL_ROOT_PASSWORD=hello -e MYSQL_DATABASE=hello -e MYSQL_USER=hello -e MYSQL_PASSWORD=hello -d mysql:5.6

Eksik boşluk olup olmadığını da kontrol edin


5
Benimle aynı şekilde, -eçevre değişkenlerimden önceki birini kaçırıyordum .
Eric Bishard

benim durumumda değişkeni dış ortamdan dışa aktarmayı unuttum.
Przemek

15

mevcut çalışma dizininde bir boşluk vardı ve $(pwd)birimleri eşlemek için kullanılıyordu. Dizin adlarındaki boşluklardan hoşlanmaz.


2
Bu benim için çözdü! Ben sarılmış $(pwd)tırnak içinde ve işe yaradı.
MerseyViking

8

Benim durumumda, docker-compose.ymlbüyük harflerle tanımlanan görüntü adı . Hata mesajı sözü gerçeği repositoryyerine imageyardım etmedi sorunu tanımlamak ve anlamaya biraz zaman aldı.


1
Web'de arama yapıldığında bulunan diğer bir yaygın neden, insanların birimleri monte ederken dizin adlarında boşluk karakterlerinin bulunmasıydı.
HostedMetrics.com

Bana farklı bir nedenle oldu. Dockerfile içinde büyük harflerle adlandırıldığı gibi çok aşamalı yapı. Örnek: FROM bla:bla AS BUILDbaşarısız oldu. FROM bla:bla AS buildiyiydi Thx!
Anderson Marques

8

Benim durumumda sorun parametrelerin düzenlenmesiydi. Başlangıçta --nameortam parametrelerinden sonra attach_dbs parametrelerim vardı, sonra hacim ve parametreler ve aşağıdaki gibi komut sonunda görüntü vardı.

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

Aşağıdaki gibi parametreleri yeniden düzenledikten sonra her şey yolunda gitti (temelde --nameparametre ve ardından görüntü adı koymak ).

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']}]"

4

MacOS'ta, bir iCloud sürücüsünde çalışırken, $ PWD'niz bir "Mobil Belgeler" dizini içerecektir. Uzaydan hoşlanmıyor gibi görünüyor!

Geçici bir çözüm olarak, projemi proje klasörümün yolunda yer olmayan yerel sürücüye kopyaladım.

İCloud'a giden varsayılan yolu değiştirmenin bir yolunu görmüyorum. ~/Library/Mobile Documents/com~apple~CloudDocs

"Mobil Belgeler" deki yoldaki boşluk, docker çalışmasının sevmediği şey gibi görünüyor.


1
Projeyi kopyalamak yerine boşluktan kaçabilirsiniz örn. Mobile\ Documents
efru

1

Docker-compose.yml image: ${DOCKER_REGISTRY}notificationsapi ile image:notificationsapi veya image: ${docker_registry}notificationsapiiçinde değiştirmek sorunu çözdü

hatalı dosya

  version: '3.4'

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

hatasız dosya

version: '3.4'

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

Bence hata, sahip olduğu küçük harf olmayan harflerden kaynaklanıyordu


1

Benim için sorun, hacim haritalamasında kaçılmayan alanla ilgiliydi. Docker run komutunu çalıştıran jenkins işinin içinde bir boşluk vardı ve sonuç olarak docker motoru docker run komutunu anlayamadı.


1

Aslında, bugün itibariyle docker kayıt defteri (sha 2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305) büyük harf karakterleri içeren yolları işlemez. Muhtemelen dosya düzeyinde büyük / küçük harf ayrımı yapmayan bazı işletim sistemleriyle uyumlu olmayı istemekten dolayı (yani, pencereler ) bu kesinlikle kötü bir tasarım seçimidir .

Bir kapsam için kimlik doğrulaması yapılırsa ve mevcut olmayan bir depoyu tümü küçük harfle getirmeye çalışırsa, çıktı

(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"}]}]}

Ancak, bunu büyük harfli bir bileşenle yapmaya çalışırsanız, yalnızca 404 döndürülür:

(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

1

bazen belirli çoklu ortam değişkenleri satır içi olduğunda -e işaretini kaçırırsınız

örneğin kötü: docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>

iyi: docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>


1

Bir referenceDocker bir görüntüye işaret budur. Bu, uzak bir kayıt defterinde veya yerel kayıt defterinde olabilir. Önce hata mesajını tanımlayıp ardından bunun çözümlerini göstereyim.

geçersiz referans biçimi

Bu, kullandığımız referansın geçerli bir format olmadığı anlamına gelir. Bu, bir görüntüyü tanımlamak için kullandığımız referansın (işaretçi) geçersiz olduğu anlamına gelir. Genel olarak, bunu aşağıdaki gibi bir açıklama izler. Bu, hatayı çok daha net hale getirecektir.

geçersiz referans biçimi: kod deposu adı küçük harf olmalıdır

Bu, kullandığımız referansın büyük harf içermemesi gerektiği anlamına gelir. docker run Ubuntu( Yanlış ) vs docker run ubuntu( doğru ) koşmayı deneyin . Docker, görüntü referansı olarak herhangi bir büyük harf karakterine izin vermez. Basit sorun giderme adımları.

1) Dockerfile , görüntü olarak büyük harfler içerir.

FROM Ubuntu (wrong)
FROM ubuntu (correct)

2) docker-compose.yml dosyasında tanımlanan resim adı büyük harflerden oluşuyordu

3) Docker konteynerinizi dağıtmak için Jenkins veya GoCD kullanıyorsanız, lütfen görüntü adının büyük harf içerip içermediğini kontrol edin.

Lütfen bu hata için özel olarak yazılmış bu belgeyi okuyun .


0

Ben de aynı hatayı aldım ve bazı nedenlerden dolayı docker runkomutu çalıştıran Jenkins işindeki büyük harflerden kaynaklanıyor gibi görünüyor .


0

Bu, $(pwd)harita hacimleri için gelen geçerli çalışma dizinindeki boşluklar nedeniyle oluyor . Ben de docker-composeonun yerine kullandım .

docker-compose.ymlDosyası.

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

0

"docker build -f Dockerfile -t SpringBoot-Docker." Yukarıdaki açıklamada olduğu gibi docker container için bir imaj dosyası oluşturuyoruz. Commend, görüntü kullanım dosyası oluştur diyor ( -f docker dosyasına bakın imaj dosyasının hedefi için ) ve -t . "." mevcut dizini temsil eder

yukarıdaki sorun için çözüm: hedef görüntü adını küçük harfle sağlayın


0

Docker, Dockerfile'daki talimatları okuyarak görüntüleri otomatik olarak oluşturabilir. Dockerfile, bir kullanıcının bir görüntüyü birleştirmek için komut satırında çağırabileceği tüm komutları içeren bir metin belgesidir. örnek: FROM python: 3.7-alp 'Python' küçük harfle yazılmalıdır


0

Benim durumumda postgres'i docker üzerinden çalıştırmaya çalışıyordum. Başlangıçta şu şekilde koşuyordum:

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

Her ortam değişkeninden sonra -e eksikti . Yukarıdaki komutu aşağıdakine değiştirmek işe yaradı

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


0

Hata mesajının sorun dizesini vermesini diliyorum. Bunu bir "docker run" komutunun garip bir kopyala ve yapıştır sorunundan alıyordum. Depo ve görüntü adından önce boşluk benzeri bir karakter kullanılıyordu.


0

Yukarıdaki cevapların çoğu benim durumum için işe yaramadı, bu yüzden birisinin yararlı bulması durumunda bunu belgeleyeceğim. FROM node:10Benim durumum için dockerfile'daki ilk satır , kelime düğümü yani büyük harf olmamalıdır FROM NODE:10. Bu değişikliği ben yaptım ve işe yaradı.


0

Benim durumumda DockerFile, görüntü adını küçük harf yerine karışık durumda içeriyordu.

DockerFile'ımdaki önceki satır

FROM CentOs

ve yukarıda olarak değiştirdiğimde FROM centossorunsuz çalıştı.


0

Benim durumumda çıplak bir --envanahtarım vardı , yani gerçek değişken adı veya değeri olmayan bir anahtar, örneğin:

docker run \
   --env \       <----- This was the offending item
   --rm \
   --volume "/home/shared:/shared" "$(docker build . -q)"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.