ডকার কপি সমস্যা - "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"


36

আমার ডকফাইফিলে আমার নীচের 'কপি' বিবৃতি রয়েছে:

# Copy app code
COPY /srv/visitor /srv/visitor

এটা বলা ছাড়াই উচিত যে আমার হোস্ট সিস্টেমে "/ srv / দর্শক" ডিরেক্টরিতে আসলে আমার উত্স কোডটি রয়েছে:

[root@V12 visitor]# ls /srv/visitor/
Dockerfile  package.json  visitor.js

এখন, আমি যখন এই ডকফেরফিলটি ব্যবহার করে একটি চিত্র তৈরির চেষ্টা করব তখন "কপি" হওয়ার কথা যখন ধাপে স্থির থাকে তখন:

Step 10 : COPY /srv/visitor /srv/visitor
INFO[0155] srv/visitor: no such file or directory

এটি বলে যে এখানে কোনও ডিরেক্টরি নেই তবে স্পষ্টভাবে রয়েছে।

কোন ধারনা?

আপডেট 1:

এটি আমার দিকে ইঙ্গিত করা হয়েছে যে আমি ভুল হয়ে গিয়েছিলাম, যেভাবে আমি বিল্ড প্রসঙ্গটি বুঝি। পরামর্শটি "কপি" বিবৃতিটি এতে পরিবর্তন করার পরিমাণ হিসাবে রয়েছে:

COPY . /srv/visitor

সমস্যাটি হ'ল আমার কাছে এটি ছিল এবং বিল্ডিং প্রক্রিয়াটি পরের ধাপে থামিয়ে দিয়েছিল:

RUN npm install

এটি "কোনও প্যাকেজ.জসন ফাইল খুঁজে পাওয়া যায় নি" এর ধারায় কিছু বলেছিল, যখন স্পষ্টভাবে একটি রয়েছে।

আপডেট 2:

আমি ডকফাইফিলের পরিবর্তনের সাথে এটি চালানোর চেষ্টা করেছি:

COPY source /srv/visitor/

এনপিএম চালানোর চেষ্টা করার সময় এটি বন্ধ হয়ে গেছে:

Step 12 : RUN npm install
 ---> Running in ae5e2a993e11
npm ERR! install Couldn't read dependencies
npm ERR! Linux 3.18.5-1-ARCH
npm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"
npm ERR! node v0.10.36
npm ERR! npm  v2.5.0
npm ERR! path /package.json
npm ERR! code ENOPACKAGEJSON
npm ERR! errno 34

npm ERR! package.json ENOENT, open '/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! Please include the following file with any support request:
npm ERR!     /npm-debug.log
INFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34

সুতরাং, কপিটি সম্পাদন করা হয়েছে? যদি হ্যাঁ, এনপিএম কেন প্যাকেজ.জসন খুঁজে পাচ্ছে না?


2017 সালে যারা ইস্যু খুঁজছেন তাদের জন্য - এটি আপনার সমস্যা হতে পারে github.com/docker/for-mac/issues/1922 । এটি আপনাকে .dockerignore ফাইল মুছে ফেলা এবং পুনরায় পরীক্ষা করার পরামর্শ দেয়। যদি এটি কাজ করে তবে আপনি সমস্যা সমাধানের জন্য .dockignign এ আপনার সেটিংসের সাথে ঝাঁকুনি দিতে পারেন।
অবর্ণিত

উত্তর:


35

ডকুমেন্টেশন থেকে:

<src>পথ বিল্ড প্রেক্ষাপটে ভিতরে হতে হবে ; আপনি কপি করতে পারবেন না .. / কিছু / কিছু, কারণ ডকার বিল্ডের প্রথম ধাপটি প্রেরণ ডিরেক্টরি (এবং উপ-ডিরেক্টরি) ডকার ডিমনকে প্রেরণ করা।

আপনি যখন ব্যবহার করেন তখন আপনি /srv/visitorবিল্ড প্রসঙ্গে বাইরের একটি নিখুঁত পাথ ব্যবহার করছেন এমনকি এটি যদি বর্তমান ডিরেক্টরি হয়।

আপনি আপনার বিল্ড প্রসঙ্গে আরও ভালভাবে এইভাবে সংগঠিত করুন:

├── /srv/visitor
│   ├── Dockerfile
│   └── resources
│       ├── visitor.json
│       ├── visitor.js

আর ব্যবহার করুন :

COPY resources /srv/visitor/

বিঃদ্রঃ:

docker build - < Dockerfile কোন প্রসঙ্গ নেই।

অতএব ব্যবহার করুন,

docker build .


আমি ইতিমধ্যে আমার হোস্ট সিস্টেমের "/ srv / ভিজিটর" ডিরেক্টরিতে রয়েছি এবং আমার সমস্ত উত্স কোড, এবং ডকফেরফাইল এখানে রয়েছে। আমার "কপি" বিবৃতিটি কীভাবে লিখব যাতে এই সমস্ত উত্সটি ধারকটির "/ srv / দর্শক" ডিরেক্টরিতে অনুলিপি হয়ে যায়?
dsljanus

1
@dsljanus সোর্স ডিরেক্টরিতে বা ফাইল থাকতে হবে আপেক্ষিক বিল্ড প্রসঙ্গ অর্থাৎ /srv/visitorডিরেক্টরি।
জাভিয়ের লুকাস

সুতরাং, এটি "হওয়া উচিত?" কারণ আমার কাছে এটি ছিল, এবং বিল্ড প্রক্রিয়াটি পরবর্তী ধাপে থামিয়ে দিয়েছিল, "আরএনএন এনএমপি ইনস্টল করুন"। এটি "কোনও প্যাকেজ.জসন ফাইল খুঁজে পাওয়া যায় নি" এর লাইনে কিছু বলেছে। আমার আপডেটও দেখুন।
dsljanus

2
@sdjanus এবং সুতরাং আপনি কোথা থেকে এনটিএম চালাচ্ছেন? আপনার পুরো ডকফায়াইল পোস্ট করুন ... বিটিডব্লিউ প্রশ্নগুলিতে এর মতো একাধিক আপডেট সংশোধন করে না, এটি একটি সমস্যা থেকে সম্পূর্ণ আলাদা হয়ে যাওয়ার জন্য সত্যিই বিরক্তিকর। এসএফের উদ্দেশ্য স্পষ্ট উত্তরগুলি পেতে স্পষ্ট প্রশ্নগুলি পোস্ট করা post
জাভিয়ের লুকাস 14

1
@ এস এস এলজানুস ঠিক আছে তাই সমস্যা, ব্যবহার করবেন না RUN cdতবে ব্যবহার করুন WORKDIRযাতে প্রতিটি পদক্ষেপের মধ্যে বর্তমান ডিরেক্টরি মনে রাখা যায়। ডকারফিলটি ডকার রান + ডকার কমিটের জন্য মোড়কের চেয়ে বেশি কিছু নয় যাতে প্রতিটি পদক্ষেপটি পূর্ববর্তী স্তরের উপরে স্বাধীনভাবে চালিত হয়। এর অর্থ পিডাব্লুডির /প্রতিটি পদক্ষেপের সমান যদি আপনি এই নির্দেশিকাটি ব্যবহার না করেন।
জাভিয়ের লুকাস 14

39

আমার জন্য ডিরেক্টরিটি সঠিক প্রসঙ্গে ছিল, কেবলমাত্র এটি .dockerignoreপ্রকল্পের মূলের (লুকানো) ফাইলের মধ্যে অন্তর্ভুক্ত ছিল । এটি ত্রুটির বার্তা নিয়ে যায়:

lstat mydir/myfile.ext: no such file or directory

3
তুমি বোঝাতে চাইছ .dockerignore? আমার সাথে এটি ঘটেছিল
মার্টন কল 12'16

5
তোমার মঙ্গল হোক! আমার একটি সম্পূর্ণ ডিরেক্টরি ছিল যা আমি এড়িয়ে যাচ্ছিলাম যা আমি ভুলে গিয়েছিলাম এবং এটি আমার বিল্ডটি ভেঙে দিয়েছে। একটি ছোট নোট হিসাবে, আপনি একটি ডিরেক্টরিতে ডিরেক্টরিতে একটি ফাইল আন-উপেক্ষা করতে পারবেন: !path/to/my/fileএমনকি যদি pathতা এতে থাকে .dockerignore
hjc1710


এটির জন্য আমি আপনার প্রতি কতটা কৃতজ্ঞ তা প্রকাশ করতে পারছি না, পুরো দিন ধরে নিজেকে নির্যাতন করে চলেছি। ডকারের জন্য ভিএস সরঞ্জামগুলি এতে * একটি ডকরিগনোর অন্তর্ভুক্ত করার কারণে এখনও এটি পায় না
বিলাল.হাইডার

7

আমার জন্য বিষয়টি ছিল আমি ব্যবহার করছি was docker build - < Dockerfile

ডকুমেন্টেশন থেকে দ্রষ্টব্য: আপনি যদি STDIN ( docker build - < somefile) ব্যবহার করে নির্মাণ করেন তবে কোনও বিল্ড প্রসঙ্গে নেই, তাই কপি ব্যবহার করা যাবে না।


1

জাভিয়ের লুকাস যেমন [অত্যন্ত সহায়ক] উত্তরটি বলেছে, আপনি আপনার বিল্ড প্রসঙ্গে বাইরের কোনও ডিরেক্টরি থেকে কপি বা এডিডি ব্যবহার করতে পারবেন না (যে ফোল্ডারটি আপনি "ডকার বিল্ড" চালান, আপনার ডিরেক্টরিটি ডকফেরাইলের মতো হওয়া উচিত)। এমনকি যদি আপনি একটি সিমলিংক ব্যবহার করার চেষ্টা করেন তবে এটি কার্যকর হবে না।

দ্রষ্টব্য: এটি পসিক্সের জন্য নির্দিষ্ট (লিনাক্স, ইউনিক্স, ম্যাক, উইন্ডোজের জন্য সম্ভবত লিনাক্স সাবসিস্টেম)। আপনি জাঙ্কশন ব্যবহার করে উইন্ডোজে অনুরূপ করতে সক্ষম হতে পারেন।

cd ~/your_docker_project/
cp -al /subfolder/src_directory ./
echo "COPY src_directory /subfolder/" >> Dockerfile

বিপদ: এটি ব্যবহার করা আপনার ডকার প্রকল্পটিকে হোস্টের জন্য নির্দিষ্ট করে তুলবে। আপনি প্রায় কখনও এটি করতে চান না! যত্নের সাথে সামলানো.

অ্যাপ্লিকেশন: শেখা, একটি উন্নয়ন পরিবেশে পরীক্ষা

এটি আমার জন্য কৌশলটি করেছে। সিপি -al ডিরেক্টরি কাঠামো অনুলিপি করে এবং সমস্ত ফাইলের জন্য হার্ড লিঙ্কগুলি তৈরি করে। আপনার হয়ে গেলে এটি সরানোর জন্য "rm -rf ./src_directory" চালান।


আমার উদ্দেশ্য: আমার স্থানীয় ফাইল সিস্টেমে ক্যাশেড প্যাকেজগুলি আমার ডকার ইমেজে অনুলিপি করুন। আমার প্রয়োজনীয় সরঞ্জামগুলি ইনস্টল করুন (এটি হয় ক্যাশে ব্যবহার করবে বা এটি নতুন ডাউনলোড করবে)। তারপরে আমি সেই ক্যাশেটি চিত্রটিতে মুছুন এবং হোস্টের হার্ড-লিঙ্কগুলি মুছব। হোস্টের কাছে এই ফাইলগুলি না থাকলে কোনও উদ্বেগ নেই। তবে আমার কাছে সীমিত ব্যান্ডউইথ এবং ড্রাইভের সীমা রয়েছে। এটি কি গ্রহণযোগ্য ব্যবহার?
তমুসজেরোয়েস

1

আমি এই ইস্যুতে চলছিলাম এবং জানতে পেরেছিলাম যে আমি অন্য ডাইরেক্টরি থেকে আমার ডকফার্মিল (গুলি) লোড করতে বিল্ড ভেরিয়েবলের একটি প্রসঙ্গ যুক্ত করতে সক্ষম হয়েছি। এটি আমার পছন্দ অনুযায়ী আমার ডিফল্ট ডকার ফাইল কাঠামোকে আরও কিছুটা পরিবর্তন করতে দেয়। আমার ডকার-কমপোজ.আইএমএল এর একটি স্নিপেট এখানে রয়েছে:

version: '3'
services:
  webserver:
    build:
      context: .
      dockerfile: ./server/Dockerfile
    ...

প্রসঙ্গটি যুক্ত করে ফাইলগুলি কোথায় উল্লেখ করা উচিত তা আমি সংজ্ঞা দিতে সক্ষম হয়েছি। আপনি এখানে ডকার ডক্স উল্লেখ করতে পারেন: https://docs.docker.com/compose/compose-file/#context

আশাকরি এটা সাহায্য করবে!


0

আমার জন্য সমস্যা হ'ল আমি যে ফাইল নামটি যুক্ত করছিলাম তার পিছনে স্থান ছিল। একটি নতুন নাম এটি স্থির করে।


0

নিম্নলিখিত ত্রুটির জন্য,

COPY failed: stat

আমি ডকার পরিষেবাটি পুনরায় চালু করে এটি পেয়েছিলাম।


0

আমি অবশেষে আমার ক্ষেত্রে এই সমস্যাটি সমাধান করেছি ডকফাইফাইল যা অনুলিপি কার্যকর করেছিল প্রকল্পের গভীর স্তরে ছিল। সুতরাং আমি বুঝতে পেরেছি যে হোস্টের বিল্ড পাথটি ডকফাইফিলের ফাইল অবস্থানের সাথে সম্পর্কিত।


0

অন্য ডিরেক্টরি থেকে ডকার ফাইল চালানোর চেষ্টা করার সময় আমার সাথে এটি ঘটেছিল।

আমি COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directoryডকার ফাইলটি নির্দিষ্ট করে সমাধান করেছি এবং এটি সমাধান করেছি।

docker build . -f docker/development/Dockerfileকাজ চলছে

তবে চলমান Runningডকার বিল্ড ডকার / ডেভলপমেন্ট / ডকফেরফিল` এই সমস্যাটি তৈরি করেছে।

-fঅথবা --fileএর নাম এবং অবস্থান নির্দিষ্ট করতে Dockerfile

এটি প্রথমে এটি অদ্ভুত বলে মনে হয়েছিল কারণ আমার যখন Dockerfileঅ্যাপস রুট ডিরেক্টরিতে ছিল তখন এটি কাজ করেছিল। আপনি যদি আপনার পরিবেশ ডকার ফাইলগুলি আরও ভালভাবে পরিচালনা করতে চান তবে এটি সহায়তা করবে।


0

বর্তমান বিল্ড প্রসঙ্গে ফাইলটি কেবল একটি ডিরেক্টরিতে থাকা উচিত নয়, তবে ফাইলটি বিল্ড কনটেক্সটের বাইরে কোনও ফাইলের নরম লিঙ্ক হতে পারে না।

আমার নিজের ডিরেক্টরি ডিরেক্টরিতে একটি ফাইলের লিঙ্ক ছিল এবং লিঙ্কটি প্রকল্প ডিরেক্টরিতে ছিল। আমি লিঙ্কটি মুছে ফেলার পরে এবং প্রকল্পটিতে লিঙ্কযুক্ত ফাইলটি সরানোর পরে ( rm mylink ; mv ~/myrealfile ./), তখন এটি কার্যকর হয়েছিল।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.