ডকার ত্রুটি: অবৈধ রেফারেন্স ফর্ম্যাট: সংগ্রহস্থলের নাম অবশ্যই ছোট হাতের হতে হবে


92

আমার এক প্রকল্পের সাহায্যে এই ডকার ত্রুটিতে চলে গেছে:

invalid reference format: repository name must be lowercase

এই জেনেরিক বার্তার বিভিন্ন কারণ কি?

কিছু চেষ্টা করার পরে আমি এটি ইতিমধ্যে খুঁজে পেয়েছি, তাই আমি এখানে নিজের ডকুমেন্টের জন্য আমার নিজের প্রশ্নের উত্তর দিতে যাচ্ছি কারণ ওয়েব অনুসন্ধান করার সময় সমাধানটি ঠিক তত্ক্ষণাত আসে না এবং কারণ এই ত্রুটি বার্তাটি বর্ণনা করে না সরাসরি সমস্যা ডকারের মুখোমুখি।


এই ত্রুটি বার্তায় "রেফারেন্স" হ'ল একটি চিত্রের শনাক্তকারী, যেমন বিএমিচ তার উত্তরে ব্যাখ্যা করেছিল। সুতরাং আপনি কোনও চিত্রকে নির্দেশ করতে যে মানটির বিন্যাসটি ব্যবহার করেছেন তা অবৈধ। পড়ুন BMitch এর পূর্ণ ব্যাখ্যা: stackoverflow.com/a/52818152/336694
HostedMetrics.com

উত্তর:


88

ডকারে একটি "রেফারেন্স" একটি চিত্রের পয়েন্টার। এটি কোনও চিত্রের নাম, একটি চিত্র আইডি হতে পারে, নামটিতে একটি রেজিস্ট্রি সার্ভার অন্তর্ভুক্ত করে, চিত্রটি পিন করতে একটি শ 256 ট্যাগ ব্যবহার করতে পারে এবং আপনি যে চিত্রটি চালাতে চান তা ইঙ্গিত করতে ব্যবহার করা যেতে পারে এমন অন্য কিছু।

invalid reference formatত্রুটি বার্তা উপায়ে Docker স্ট্রিং আপনি একটি ইমেজ গুলি প্রদান করেছেন সেগুলি রূপান্তর করতে পারবে না। এটি একটি অবৈধ নাম হতে পারে, বা 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

4
"ডকার রান কমান্ড লাইনের সাহায্যে প্রায়শই স্পেসগুলির সাথে পরামিতিগুলি উদ্ধৃত না করা এবং কমান্ড লাইনের
ক্রমটি

2 বছর পরেও অত্যন্ত সহায়ক পোস্ট!
জিও 13

নিখুঁত কাজ করেছেন। ধন্যবাদ!
ইগোর মেলানো

25

আমি জোর দিয়ে বলি যে ডকার এমনকি মিশ্র অক্ষরগুলিকেও অনুমতি দেয় না।

ভাল: docker build -t myfirstechoimage:0.1 .

খারাপ: docker build -t myFirstEchoImage:0.1 .


4
বাহ, এটি অনেক প্রচেষ্টা সঞ্চয় করেছে!
জিজ্ঞাসুবাদ

4
ডকার চিত্রটি তৈরি করতে আমি স্প্রিংবুট প্রকল্পে "স্পটফাইফ" মার্ভেন নির্ভরতা ব্যবহার করছি এবং কয়েক ঘন্টা থেকে আমি সমস্যাটি বোঝার জন্য সংগ্রাম করে যাচ্ছিলাম। প্রজেক্টের নাম (মূলধন অক্ষর রয়েছে) ইস্যুটি পরিণত হতে!
অভিষেক আগরওয়াল

18

আমার ক্ষেত্রে -eমাইএসকিএল ডকারের পরামিতিগুলির আগে ছিল

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

অদৃশ্য সাদা জায়গা আছে কিনা তাও পরীক্ষা করে দেখুন


4
আমার সাথে একই, আমি -eআমার পরিবেশের পরিবর্তনশীলগুলির একটির আগে মিস করছিলাম।
এরিক বিশার্ড

আমার ক্ষেত্রে আমি বাহ্যিক পরিবেশ থেকে পরিবর্তনশীল রফতানি করতে ভুলে গেছি।
প্রেজেমেক

15

বর্তমান কার্যনির্বাহী ডিরেক্টরিতে একটি জায়গা ছিল এবং $(pwd)মানচিত্রের ভলিউমে ব্যবহার করুন। ডিরেক্টরি নামের জায়গাগুলি পছন্দ করে না।


4
এটা আমার জন্য এটি সমাধান! আমি $(pwd)উদ্ধৃতিগুলিতে আবৃত করেছি এবং এটি কার্যকর হয়েছে।
MerseyViking

8

আমার ক্ষেত্রে, চিত্রটির নামটি docker-compose.ymlবড় হাতের অক্ষরগুলিতে সংজ্ঞায়িত । repositoryপরিবর্তে উল্লিখিত ত্রুটি বার্তাটি imageসমস্যাটি বর্ণনা করতে সহায়তা করে নি এবং এটি বের করতে কিছুটা সময় নিয়েছে।


4
ওয়েবে অনুসন্ধান করে পাওয়া আর একটি সাধারণ কারণ হ'ল ভলিউম মাউন্ট করার সময় লোকেরা তাদের ডিরেক্টরিতে নামের অক্ষর রাখে।
হোস্টেডমেট্রিক্স ডটকম 13 ই

আমার সাথে এটি অন্য কারণে ঘটেছিল। উপরের অক্ষরের সাথে নাম অনুসারে ডকারফিলের ভিতরে ডকার মাল্টি-স্টেজ বিল্ড। উদাহরণ: 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 একটি ডিরেক্টরি "মোবাইল ডকুমেন্টস" ধারণ করবে। মনে হচ্ছে জায়গাটা পছন্দ হবে না!

কার্যকারণ হিসাবে, আমি আমার প্রকল্পটি স্থানীয় ড্রাইভে অনুলিপি করেছি যেখানে আমার প্রকল্প ফোল্ডারের পথে কোনও স্থান নেই।

আমি আইক্লাউডের ডিফল্ট পাথটি চ্যানজিগের কাছাকাছি পাওয়ার কোনও উপায় দেখতে পাচ্ছি না ~/Library/Mobile Documents/com~apple~CloudDocs

"মোবাইল ডকুমেন্টস" এর পথের স্থানটি মনে হয় ডকার রান কী পছন্দ করে না।


4
প্রকল্পটি অনুলিপি না করে আপনি স্থানটি এড়াতে পারবেন যেমন Mobile\ Documents
এপ্রু

1

ডকার-কম্পোজ.আইএমএল বা এর image: ${DOCKER_REGISTRY}notificationsapi সাথে প্রতিস্থাপন করা সমস্যার সমাধান করেimage:notificationsapiimage: ${docker_registry}notificationsapi

ত্রুটি সহ ফাইল

  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

কখনও কখনও আপনি নির্দিষ্ট একাধিক এনভ ভার্স ইনলাইন থাকাকালীন পতাকা মিস করেন

যেমন খারাপ: 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) ডকফাইফিল ইমেজ হিসাবে একটি বড় অক্ষর রয়েছে।

FROM Ubuntu (wrong)
FROM ubuntu (correct)

2) চিত্রের নাম ডকার-কমপোজ.আইএমএল সংজ্ঞায়িত বড় হাতের অক্ষর ছিল

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 স্প্রিংবুট-ডকার" " উপরোক্ত প্রশংসা হিসাবে, আমরা ডকার পাত্রে জন্য একটি চিত্র ফাইল তৈরি করছি। প্রশংসনীয় চিত্র ব্যবহার ফাইল ( -ফ ডকার ফাইল উল্লেখ করুন ) এবং -t আমরা যে ইমেজ ফাইলটিকে ডকারে ঠেলে যাচ্ছি তার টার্গেটের জন্য। দ্য "." বর্তমান ডিরেক্টরি প্রতিনিধিত্ব করে

উপরের সমস্যার সমাধান: ছোট হাতের অক্ষরে চিত্রের নাম সরবরাহ করুন


0

ডকার ডকফাইফাইলের নির্দেশাবলী পড়ে স্বয়ংক্রিয়ভাবে চিত্রগুলি তৈরি করতে পারে। ডকফেরফিল হ'ল একটি পাঠ্য নথি যা ব্যবহারকারীর দ্বারা একটি চিত্র একত্রিত করার জন্য কমান্ড লাইনে কল করতে পারে এমন সমস্ত কমান্ড রয়েছে। উদাহরণ: পাইথন থেকে: 3.7-alpine 'পাইথন' ছোট হাতের অক্ষরে থাকতে হবে


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

আমি অনুপস্থিত ছিল -e প্রতিটি এনভায়রনমেন্ট ভেরিয়েবল পরে। উপরের কমান্ডটি নীচের অংশে পরিবর্তন করা

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

আমি আশা করি ত্রুটি বার্তাটি সমস্যার স্ট্র্যাপ আউটপুট করবে। "ডকার রান" কমান্ডের একটি অদ্ভুত অনুলিপি এবং পেস্ট সমস্যার কারণে আমি এটি পেয়েছিলাম। একজন SPACE- মত চরিত্র রেপো এবং ইমেজ নাম আগে ব্যবহার করা হয়েছিল।


0

উপরের উত্তরগুলির বেশিরভাগগুলি আমার ক্ষেত্রে কার্যকর হয়নি, সুতরাং কেউ যদি সহায়ক বলে মনে হয় তবে আমি এটি নথিভুক্ত করব। Dockerfile প্রথম লাইনে FROM node:10আমার ক্ষেত্রে জন্য, শব্দ নোড করা উচিত হবে না বড়হাতের অর্থাত FROM NODE:10। আমি সেই পরিবর্তন করেছি এবং এটি কার্যকর হয়েছে।


0

আমার ক্ষেত্রে ডকারফাইলে লোয়ার কেসের পরিবর্তে মিশ্র মামলায় চিত্রটির নাম রয়েছে।

আমার ডকারফাইলে আগের লাইন

FROM CentOs

এবং যখন আমি উপরে পরিবর্তিত হয়েছিলাম FROM centos, এটি সহজেই কাজ করেছিল।


0

আমার ক্ষেত্রে আমার একটি নগ্ন --envসুইচ ছিল, যেমন একটি আসল পরিবর্তনশীল নাম বা মান ব্যতীত, যেমন:

docker run \
   --env \       <----- This was the offending item
   --rm \
   --volume "/home/shared:/shared" "$(docker build . -q)"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.