डॉकर त्रुटि: अमान्य संदर्भ प्रारूप: रिपॉजिटरी का नाम लोअरकेस होना चाहिए


86

मेरी एक परियोजना के साथ इस डॉकटर त्रुटि में भाग गया:

invalid reference format: repository name must be lowercase

इस सामान्य संदेश के विभिन्न कारण क्या हैं?

मैंने पहले से ही कुछ प्रयास के बाद इसका पता लगा लिया है, इसलिए मैं अपने स्वयं के प्रश्न का उत्तर देने के लिए जा रहा हूँ ताकि इसे यहाँ दस्तावेज़ के रूप में हल कर सकूं जब वेब खोज करते समय और इस त्रुटि संदेश का वर्णन नहीं किया जाता है। सीधी समस्या डॉकटर से होती है।


इस त्रुटि संदेश में "संदर्भ" एक छवि का पहचानकर्ता है, जैसा कि BMitch ने अपने उत्तर में बताया है। इसलिए छवि के लिए आपके द्वारा उपयोग किए जाने वाले मूल्य का प्रारूप अमान्य है। BMitch की पूरी व्याख्या पढ़ें: stackoverflow.com/a/52818152/336694
HostedMetrics.com

जवाबों:


78

डॉक में एक "संदर्भ" एक छवि के लिए एक संकेतक है। यह एक छवि नाम, एक छवि आईडी हो सकता है, नाम में एक रजिस्ट्री सर्वर शामिल हो सकता है, छवि को पिन करने के लिए एक sha256 टैग का उपयोग करें, और कुछ और जिसे आप चलाना चाहते हैं छवि को इंगित करने के लिए उपयोग किया जा सकता है।

invalid reference formatत्रुटि संदेश का अर्थ है डोकर स्ट्रिंग आप एक छवि को उपलब्ध कराया है परिवर्तित नहीं कर सकते। यह एक अमान्य नाम हो सकता है, या यह docker runकमांड लाइन में पहले की पार्सिंग त्रुटि से हो सकता है यदि आप इस छवि को चलाते हैं। कंपोज़ फ़ाइल के साथ, यदि आप छवि नाम में एक चर का विस्तार करते हैं, तो वह चर सही तरीके से विस्तार नहीं कर सकता है।

साथ docker runकमांड लाइन, यह अक्सर रिक्तियों के साथ मानकों के हवाले से नहीं, और कमांड लाइन के आदेश भूल में परिणाम है। कमांड लाइन इस प्रकार है:

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

रन के लिए आर्गन पास करने में सबसे आम त्रुटि एक वॉल्यूम मैपिंग है जिसमें एक पथ नाम का विस्तार होता है जिसमें एक स्थान शामिल होता है, और पथ को उद्धृत नहीं करना या अंतरिक्ष से बचना। उदाहरण के लिए

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

और फिक्स जितना आसान है:

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

3
"Docker रन कमांड लाइन के साथ, यह अक्सर रिक्त स्थान के साथ मापदंडों को उद्धृत नहीं करने और कमांड लाइन के आदेश को गलत करने का परिणाम है" यह वास्तव में उपयोगी था
user979899

2 साल बाद भी बेहद मददगार पोस्ट!
जियो

सही काम किया। धन्यवाद!
इगोर मेलो

24

मुझे इस बात पर जोर देना चाहिए कि डॉकर मिश्रित चरित्रों की भी अनुमति नहीं देता है।

अच्छा: docker build -t myfirstechoimage:0.1 .

खराब: docker build -t myFirstEchoImage:0.1 .


1
वाह, यह बहुत प्रयास बचा लिया!
जिज्ञासु

1
मैं स्प्रिंगबूट परियोजना में "स्पॉटिफ़" मावेन निर्भरता का उपयोग कर रहा हूं ताकि डॉकटर छवि का निर्माण किया जा सके और पिछले कुछ घंटों से मैं इस मुद्दे को समझने के लिए संघर्ष कर रहा था। प्रोजेक्ट का नाम (कैपिटल कैरेक्टर में) इश्यू होना चाहिए!
अभिषेक अग्रवाल ०

15

वर्तमान वर्किंग डायरेक्टरी में जगह थी और $(pwd)वॉल्यूम को मैप करने के लिए। निर्देशिका नामों में स्थान पसंद नहीं करता है।


2
यह मेरे लिए हल! मैं $(pwd)उद्धरणों में लिपटा और यह काम किया।
MerseyViking

14

मेरे मामले में -emysql docker के मापदंडों से पहले था

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

यह भी देखें कि कहीं गायब व्हाट्सएप तो नहीं है


5
मेरे साथ भी, मैं -eअपने एक पर्यावरण चर से पहले गायब था ।
एरिक बिशर्ड

मेरे मामले में मैं बाहरी वातावरण से चर निर्यात करना भूल गया।
प्रेजेमेक

8

मेरे मामले में, docker-compose.ymlनिहित अपरकेस अक्षरों में परिभाषित छवि नाम । तथ्य यह है कि त्रुटि संदेश के repositoryबजाय imageसमस्या का वर्णन करने में मदद नहीं की और यह पता लगाने में कुछ समय लगा।


1
वेब पर खोज करने का एक अन्य आम कारण यह था कि बढ़ते संस्करणों के लिए लोगों के पास उनके निर्देशिका नामों में स्थान वर्ण होते हैं।
HostedMetrics.com

यह मेरे लिए एक अलग कारण से हुआ। डॉकटर मल्टी-स्टेज बिल्ड डॉकरफाइल के रूप में ऊपरी अक्षरों के साथ नामित किया गया है। उदाहरण: FROM bla:bla AS BUILDविफल। FROM bla:bla AS buildठीक था!
एंडरसन

8

मेरे मामले में समस्या मापदंडों की व्यवस्था में थी। शुरू में मेरे पास --nameपर्यावरण के मापदंडों और फिर वॉल्यूम और attach_dbs मापदंडों के बाद पैरामीटर था, और नीचे की तरह कमांड के अंत में छवि।

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

नीचे दिए गए मापदंडों को पुन: व्यवस्थित करने के बाद जैसे सब कुछ ठीक काम करता है (मूल रूप --nameसे छवि नाम के बाद पैरामीटर डाल )।

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 पर, आपके $ PWD में एक निर्देशिका "मोबाइल दस्तावेज़" होगी। यह अंतरिक्ष को पसंद नहीं करता है!

वर्कअराउंड के रूप में, मैंने अपनी परियोजना को स्थानीय ड्राइव पर कॉपी किया जहां मेरे प्रोजेक्ट फ़ोल्डर के पथ में कोई स्थान नहीं है।

मुझे ऐसा कोई रास्ता नहीं दिख रहा है जिससे आप चेंग्निग के लिए डिफ़ॉल्ट रास्ता पा सकें जो कि iCloud है ~/Library/Mobile Documents/com~apple~CloudDocs

"मोबाइल डॉक्यूमेंट्स" में पथ का स्थान ऐसा लगता है कि डॉक चलाने वाले को पसंद नहीं है।


1
प्रोजेक्ट की प्रतिलिपि बनाने के बजाय, आप अंतरिक्ष से बच सकते हैं जैसे Mobile\ Documents
efru

1

के image: ${DOCKER_REGISTRY}notificationsapi साथ image:notificationsapi या image: ${docker_registry}notificationsapi docker-compose.yml में बदलने से समस्या हल हो गई

त्रुटि के साथ फ़ाइल

  version: '3.4'

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

त्रुटि के बिना फ़ाइल

version: '3.4'

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

इसलिए मुझे लगता है कि त्रुटि के कारण गैर-अक्षर वाले पत्र कम थे


1

मेरे लिए यह मुद्दा वॉल्यूम मैपिंग में जगह के साथ था जो बच नहीं रहा था। जेंकिंस जॉब जो डॉक रन कमांड चला रहा था, उसमें एक स्पेस था और परिणामस्वरूप डॉक इंजन को डॉक रन कमांड समझने में सक्षम नहीं था।


1

दरअसल, आज (शा 2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305) के रूप में डॉक रजिस्ट्री ऊपरी-मामले वाले पात्रों को नहीं संभालती है। यह स्पष्ट रूप से एक खराब डिजाइन विकल्प है, शायद कुछ ऑपरेटिंग सिस्टम के साथ संगत बनाए रखने की इच्छा के कारण जो फ़ाइल स्तर (यानी, विंडोज़ ) पर मामले को अलग नहीं करते हैं ।

यदि कोई गुंजाइश के लिए प्रमाणित करता है और सभी लोअरकेस के साथ गैर-मौजूदा रिपॉजिटरी लाने की कोशिश करता है, तो आउटपुट है

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

हालांकि, अगर कोई अपरकेस घटक के साथ ऐसा करने की कोशिश करता है, तो केवल 404 ही लौटाया जाता है:

(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

कभी-कभी आप-ई झंडे को याद करते हैं जबकि विशिष्ट कई एनवी var इनलाइन

जैसे बुरा: 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>


1

एक referenceडोकर में क्या एक छवि को इंगित करता है। यह एक दूरस्थ रजिस्ट्री या स्थानीय रजिस्ट्री में हो सकता है। मुझे पहले त्रुटि संदेश का वर्णन करने दें और फिर इसके लिए समाधान दिखाएं।

अमान्य संदर्भ प्रारूप

इसका अर्थ है कि हमने जो संदर्भ उपयोग किया है, वह एक मान्य प्रारूप नहीं है। इसका मतलब है, एक छवि की पहचान करने के लिए हमने जो संदर्भ (सूचक) का उपयोग किया है वह अमान्य है। आम तौर पर, इसका वर्णन निम्नानुसार किया जाता है। इससे त्रुटि बहुत साफ हो जाएगी।

अमान्य संदर्भ प्रारूप: रिपॉजिटरी का नाम लोअरकेस होना चाहिए

इसका मतलब यह है कि हम जिस संदर्भ का उपयोग कर रहे हैं, उसमें अपरकेस अक्षर नहीं होने चाहिए। docker run Ubuntu( गलत ) बनाम docker run ubuntu( सही ) चलाने की कोशिश करें । डॉकर किसी अपरकेस कैरेक्टर को इमेज रेफरेंस के रूप में अनुमति नहीं देता है। सरल समस्या निवारण कदम।

1) Dockerfile में चित्रों के रूप में एक कैपिटल अक्षर होता है।

FROM Ubuntu (wrong)
FROM ubuntu (correct)

2) docker-compose.yml में परिभाषित छवि नाम में बड़े अक्षर थे

3) यदि आप अपने डॉकटर कंटेनर को तैनात करने के लिए जेनकिन्स या GoCD का उपयोग कर रहे हैं, तो कृपया रन कमांड की जाँच करें, चाहे छवि नाम में कैपिटल लेटर शामिल हो।

कृपया इस त्रुटि के लिए विशेष रूप से लिखे गए इस दस्तावेज़ को पढ़ें ।


0

मेरे पास एक ही त्रुटि थी, और किसी कारण से यह प्रतीत होता है कि जेनकिंस नौकरी में अपरकेस अक्षरों के कारण था जो docker runकमांड को चलाता था ।


0

वर्तमान कार्य निर्देशिका में रिक्त स्थान के कारण ऐसा हो रहा है जो $(pwd)मानचित्र संस्करणों के लिए आया था । इसलिए, मैंने docker-composeइसके बजाय इस्तेमाल किया।

docker-compose.ymlफ़ाइल।

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

0

"डॉक बिल्ड -फ डॉकफेराइल -टी स्प्रिंगबूट-डॉकर।" जैसा कि ऊपर की सराहना करते हैं, हम डॉकटर कंटेनर के लिए एक छवि फ़ाइल बना रहे हैं। कमेंड का कहना है कि हम जिस इमेज फाइल को डॉक करने जा रहे हैं, उसके टारगेट के लिए इमेज यूज फाइल ( -फिर टू डूकर फाइल ) और -t बनाएं । "" वर्तमान निर्देशिका का प्रतिनिधित्व करता है

उपरोक्त समस्या का हल: लोअरकेस में लक्ष्य छवि नाम प्रदान करें


0

Dockerfile के निर्देशों को पढ़कर Docker अपने आप चित्र बना सकता है। Dockerfile एक टेक्स्ट डॉक्यूमेंट है, जिसमें सभी कमांड शामिल होते हैं, जिसे यूजर किसी इमेज को इकट्ठा करने के लिए कमांड लाइन पर कॉल कर सकता है। उदाहरण: अजगर से: 3.7-अल्पाइन 'अजगर' लोअरकेस में होना चाहिए


0

मेरे मामले में मैं डॉकटर के माध्यम से पोस्टग्रैज चलाने की कोशिश कर रहा था। प्रारंभ में मैं इस प्रकार चल रहा था:

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

मैं गायब था - प्रत्येक पर्यावरण चर के बाद। उपरोक्त कमांड को नीचे काम करने वाले में बदलना

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

काश त्रुटि संदेश समस्या स्ट्रिंग आउटपुट होता। मुझे "docker run" कमांड की एक अजीब कॉपी और पेस्ट समस्या के कारण ऐसा हो रहा था। रेपो और इमेज नाम से पहले एक स्पेस- जैसे कैरेक्टर का इस्तेमाल किया जा रहा था।


0

ऊपर दिए गए अधिकांश उत्तर मेरे मामले के लिए काम नहीं करते हैं, इसलिए मैं इसे इस मामले में दस्तावेज दूंगा कि कोई इसे मददगार पाए। Dockerfile में पहली पंक्ति FROM node:10मेरे मामले के लिए, शब्द नोड नहीं होना चाहिए अपरकेस यानी FROM NODE:10। मैंने वह बदलाव किया और यह काम कर गया।


0

मेरे मामले में DockerFile में कम मामले के बजाय मिश्रित मामले में छवि का नाम था।

इससे पहले मेरे डॉकरफाइल में लाइन

FROM CentOs

और जब मैं ऊपर बदल गया FROM centos, तो यह आसानी से काम किया।


0

मेरे मामले में मेरे पास एक नग्न --envस्विच था, यानी एक वास्तविक चर नाम या मूल्य के बिना, जैसे:

docker run \
   --env \       <----- This was the offending item
   --rm \
   --volume "/home/shared:/shared" "$(docker build . -q)"

-2

अपने DockerFile में लोअर केस चार्ट का उपयोग करने का प्रयास करें

उदाहरण के लिए, उपयोग करें:

openjdk:8

के बजाय

openJDK:8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.