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


186

আমার মধ্যে Dockerfileআমি পেয়েছি:

ADD ../../myapp.war /opt/tomcat7/webapps/

সেই ফাইলটি ls ../../myapp.warআমাকে সঠিক ফাইল হিসাবে ফেরত হিসাবে উপস্থিত রয়েছে তবে আমি কার্যকর sudo docker build -t myapp .করি যখন আমি পেয়েছি:

Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory

কেউ কেন জানেন এবং কেন এটি সঠিকভাবে করবেন?


2
কিছু সমাধান নীচে উপস্থিত superuser.com/questions/842642
গুন্টার Zöchbauer

উত্তর:


225

আপনি পিতামাতার ডিরেক্টরি থেকে ডকফাইফিল তৈরি করতে পারেন:

docker build -t <some tag> -f <dir/dir/Dockerfile> .

3
ধন্যবাদ! এটি একটি স্থানীয় বাক্সে দুর্দান্ত কাজ করে, তবে ডকার হাব চিত্রটি তৈরি করতে ব্যর্থ হওয়ায় এটি তার একই ডিরেক্টরি থেকে এটি করার চেষ্টা করে (টিবিএইচ, কেবলমাত্র কোনওটি প্রত্যাশা করবে)। ডকার হাবটিতে একই কৌশল করার কোনও উপায় আছে কি?
মার্সেল হার্নান্দেজ

আমি যে জানি না। আপনি স্বয়ংক্রিয় বিল্ড ব্যবহারের পরিবর্তে চিত্রটিকে রেজিস্ট্রিতে ঠেলাতে পারেন।
বোয়ডি

2
@ eduncan911 আমি আমার মন্তব্যটি লেখার সময় এইটিকে অবমানিত বলে মনে করি না। তারা কি তখন থেকেই তাদের মত বদলেছে? যদি আমি ভুল হয় তবে আপনি কী ডকুমেন্টেশনের সাথে লিঙ্ক করতে পারেন যেখানে এটির হ'ল বলা হচ্ছে। ধন্যবাদ!
omninonsense

6
-f দস্তাবেজগুলি অনুসারে অবহেলিত বলে মনে হচ্ছে না -> একটি ডকফায়াইল (-ফ) নির্দিষ্ট করুন : ডকস.ডোকার.com
রায়

6
@ Eduncan911 আপনার মন্তব্যটি মুছে ফেলা যাবে যেহেতু আপাতভাবে হ্রাস করা হয়নি? আপনার মন্তব্যের কারণে আমি প্রাথমিকভাবে এই উত্তরটি এড়িয়ে গেলাম।
ক্রিস অ্যান্ডারসন

103

দুর্ভাগ্যক্রমে, (বাস্তবিক এবং সুরক্ষার কারণে আমার ধারণা), আপনি যদি স্থানীয় সামগ্রী যুক্ত / অনুলিপি করতে চান তবে এটি অবশ্যই একই মূলের নীচে অবস্থিত থাকতে হবে Dockerfile

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

<src> পাথ অবশ্যই বিল্ডের প্রসঙ্গে থাকতে হবে; আপনি .. / কিছু / কিছু সংযোজন করতে পারবেন না , কারণ ডকার বিল্ডের প্রথম ধাপটি প্রেরণ ডিরেক্টরি (এবং উপ-ডিরেক্টরি) ডকার ডিমনকে প্রেরণ করা।

সম্পাদনা:-f আপনার ডকফাইফিলের পথ নির্ধারণের জন্য এখন একটি বিকল্প রয়েছে ( ); এটি আপনি যা চান তা অর্জন করতে ব্যবহার করা যেতে পারে, @ বোয়ডির প্রতিক্রিয়া নীচে দেখুন।


22
এর জন্য কি কোনও "ক্লিন" কাজ আছে? আমি বরং এটির জন্য আমার পুরো প্রকল্প ডিরেক্টরিটি পুনর্গঠন করব না।
ben_frankly

@ গ্যান্টারের কথা অনুসারে, এখানে একটি সুপারভাইজার.com/a/842690/ 136024 রয়েছে ... এটি কি আসলেই "পরিষ্কার"? আচ্ছা অন্তত এটি একটি "workaround" :)
অ্যান্টনি ও।

2
@Boedy থেকে ভাল উত্তর দেখুন stackoverflow.com/a/34300129/2950621
nmgeek

103

ডকার-রচনা দিয়ে আপনি প্রসঙ্গ ফোল্ডার সেট করতে পারেন:

#docker-compose.yml
version: '3.3'    
services:
      yourservice:
        build:
          context: ./
          dockerfile: ./docker/yourservice/Dockerfile

9

গৃহীত উত্তরের জন্য কিছু কোড স্নিপেট যুক্ত করা হচ্ছে।

ডিরেক্টরি কাঠামো:

setup/
 |__docker/DockerFile
 |__target/scripts/<myscripts.sh>
src/
 |__<my source files>

ডকার ফাইল এন্ট্রি:

RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/scripts/
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/src/
WORKDIR /home/vagrant/dockerws/chatServerInstaller

#Copy all the required files from host's file system to the container file system.
COPY setup/target/scripts/install_x.sh scripts/
COPY setup/target/scripts/install_y.sh scripts/
COPY src/ src/

ডকার চিত্র তৈরি করতে ব্যবহৃত কমান্ড

docker build -t test:latest -f setup/docker/Dockerfile .

দুর্দান্ত পদ্ধতির কোডটিও কি ভাগ করে নেওয়া সম্ভব install_x.sh?
আরিফুল হক

4

যারা সুরকার ব্যবহার করেন তাদের সমাধান হ'ল প্যারেন্ট ফোল্ডারের দিকে নির্দেশিত একটি ভলিউম ব্যবহার করা :

#docker-composer.yml

foo:
  build: foo
  volumes:
    - ./:/src/:ro

তবে আমি নিশ্চিত যে ডকফিলিতে ভলিউম নিয়ে খেলা করা সম্ভব ।


3
এটা পারে না। দ্রষ্টব্য: হোস্ট ডিরেক্টরিটি তার প্রকৃতির দ্বারা, হোস্ট-নির্ভর। এই কারণে, আপনি ডকস্পাইল থেকে একটি হোস্ট ডিরেক্টরি মাউন্ট করতে পারবেন না কারণ নির্মিত চিত্রগুলি পোর্টেবল হওয়া উচিত। সমস্ত সম্ভাব্য হোস্টগুলিতে একটি হোস্ট ডিরেক্টরি উপলব্ধ হবে না। docs.docker.com/engine/tutorials/dockervolume/…
পিটার কোক

4

যেহেতু -fঅন্য সমস্যা সৃষ্টি হয়েছে, তাই আমি আরও একটি সমাধান বিকাশ করেছি।

  • মূল ফোল্ডারে একটি বেস চিত্র তৈরি করুন
  • প্রয়োজনীয় ফাইল যুক্ত হয়েছে।
  • এই ইমেজটি বংশজাত ফোল্ডারে থাকা প্রকল্পের জন্য বেস ইমেজ হিসাবে ব্যবহার করুন।

-fপতাকা কারণ আমার আমার সমস্যার সমাধান করে না onbuildফোল্ডারে একটি ফাইল জন্য ছবিটি কেমন লাগে এবং এই মত কল ছিল:

-f foo/bar/Dockerfile foo/bar

পরিবর্তে

-f foo/bar/Dockerfile .

এছাড়াও মনে রাখবেন যে এটি কয়েকটি ক্ষেত্রে -fপতাকা হিসাবে কেবল সমাধান

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