ডোকার পাত্রে শুরু হওয়া / বন্ধ না করে কীভাবে ফাইলগুলি সম্পাদনা করবেন


101

আমার অ্যাপ্লিকেশনটিতে ত্রুটিগুলি সমাধান করতে এবং ডিবাগ করার সমস্যাটি চেষ্টা করা হচ্ছে যা বেশ কয়েকটি ধারকগুলিতে বিভক্ত, আমি প্রায়শই পাত্রে ফাইলগুলি সম্পাদনা করি:

  • হয় আমি সম্পূর্ণ অলস এবং ন্যানো ইনস্টল করি এবং সরাসরি পাত্রে সম্পাদনা করি বা

  • আমি সিপি ফাইলটি কনটেইনার থেকে আউট করেছি, এডিট করব, এটি অনুলিপি করব এবং ধারকটি পুনরায় চালু করব

এগুলি কনটেইনার তৈরির জন্য নতুন সামগ্রীতে আসার আগে অন্তর্বর্তী পদক্ষেপ, যা উপরের কাজগুলি করার চেয়ে অনেক বেশি সময় নেয় (অবশ্যই এটি কেবল মধ্যবর্তী / চারপাশে ফিডিং)।

এখন আমি প্রায়শই ধারকটির প্রারম্ভিক প্রোগ্রামটি ভাঙ্গি, যা ব্রেকিংয়ের ক্ষেত্রে হয় নোড স্ক্রিপ্ট বা পাইথন ওয়েবসার্ভার স্ক্রিপ্ট, উভয়ই সিনট্যাক্স ত্রুটি থেকে সাধারণত ব্যর্থ হয়।

এই পাত্রে সংরক্ষণ করার কোনও উপায় আছে কি? যেহেতু তারা শুরু করে না, তাই আমি তাদের মধ্যে ডেকার করতে পারি না এবং এভাবে তারা আমার কাছে হারিয়ে যায়। আমি তখন বিল্ড ইনপুটটিতে আপত্তিজনক ফাইলটি ঠিক করার পরে আরএম / আরএমআই / বিল্ড / রান রুটে যাই।

আমি কীভাবে থামিয়ে রাখা পাত্রে ফাইলগুলি সম্পাদনা করতে পারি, বা সেগুলিতে সিপি বা বন্ধ হওয়া পাত্রে কোনও শেল শুরু করতে পারি - এমন কিছু যা আমাকে এই ধারকটি ঠিক করতে দেয়?

(এটি কিছুটা দূরবর্তী কম্পিউটারে কাজ করা এবং নেটওয়ার্কিং কনফিগারেশনকে ভঙ্গ করার মতো বলে মনে হচ্ছে - এইভাবে সংযোগটি "চিরতরে" হারিয়ে গেছে এবং যদি বিদ্যমান থাকে তবে ফ্যালব্যাক ব্যবহার করতে হবে))

হোস্ট থেকে ডকার কনটেইনার ফাইলগুলি কীভাবে সম্পাদনা করবেন? প্রাসঙ্গিক দেখায় তবে পুরানো।


এটি আরও একটি কার্যনির্বাহী স্ট্যাকওভারফ্লো.com / a/32353134/ 586754 হতে পারে - আরও ভাল সমাধানের জন্য প্রত্যাশী।
আন্দ্রেয়াস রিফ

4
হতে পারে আপনার ভলিউম মাউন্ট করার কথা বিবেচনা করা উচিত যাতে আপনি ধারকটির অভ্যন্তরের পরিবর্তে আপনার হোস্টে ফাইলগুলি সম্পাদনা করতে পারেন। আপনার কোডটি একবারে খুশি হয়ে গেলে, আপনি docker cp
ধারকগুলিতে

হ্যাঁ, আমি যদি প্রথম থেকেই জিনিসগুলি সেট আপ না করে থাকি তবে এটি একটু দেরী হবে। আমার মনে হয় এটি পুনরুদ্ধারের জন্য কাজ করে না।
আন্দ্রেয়াস রিফ

অনেক পাঠক কেবল ফাইলগুলি সম্পাদনা করার পরিবর্তে দেখতে চান । এই ক্ষেত্রে আপনি docker commitনতুন চিত্রটি ভাঙ্গতে কমান্ডটি ব্যবহার করতে পারেন । name=$(docker commit); docker run -it $name /bin/shআপনি যা চান তা করবে
এট রিগ

সুতরাং মনে হচ্ছে যে থামানো পাত্রে ফাইল সিস্টেমগুলি শেষ পর্যন্ত তুলনামূলকভাবে স্থায়ী?
ওয়েবউইম্যান

উত্তর:


153

আমার একটি ধারক নিয়ে সমস্যা ছিল যা আমার তৈরি খারাপ কনফিগারেশনের কারণে শুরু হবে না। আমি থামানো ধারকটির বাইরে ফাইলটি অনুলিপি করে সম্পাদনা করতে সক্ষম হয়েছি। কিছুটা এইরকম:

docker cp docker_web_1:/etc/apache2/sites-enabled/apache2.conf .

(ফাইলটি সংশোধন করুন)

docker cp apache.conf docker_web_1:/etc/apache2/sites-enabled/apache2.conf

22
এই শব্দটি গ্রহণযোগ্য উত্তর হতে হবে। কোনও কারণে আমি ভাবি নি যে সিপি থামানো পাত্রে কাজ করেছে। সুন্দর!
প্রক্সিমো

পারফেক্ট আমি ধারক থেকে একটি ফাইল অনুলিপি করলাম (আমি তার পথটি জানতাম) এবং তারপরে এটি সম্পাদনা করেছিলাম এবং তারপরে ধারকটিতে আবার একই স্থানে অনুলিপি করেছি। আমার জন্য কাজ! ধন্যবাদ!
নওয়াজ

কোন ফাইল সরানোর কোনও উপায় আছে?
কোডলান

4
@ কোডলান কেবলমাত্র যদি UpperDirআপনার কাছ থেকে পাওয়াটিতে উপস্থিত হয় docker container inspect- তবে ওভারলে সিস্টেমটি অন্তর্নিহিত কাঠামোর মধ্যে যে ফাইলগুলি উপস্থাপন করে যা উপরের স্তরে মুছে ফেলা হয়েছে তা পরীক্ষা করে দেখতে হবে।
টিম বেভারস্টক

ধন্যবাদ, এটি আমাকে আমার মাইএসকিউএল ধারককে ম্যাকোজে ডকরে চালানো ঠিক করতে সহায়তা করেছে।
mazedlx

60

আমার নিজের প্রশ্নের উত্তর দেওয়া .. এখনও আরও জ্ঞাত জ্ঞাত ব্যক্তির কাছ থেকে আরও ভাল উত্তরের আশা করছি !!

2 সম্ভাবনা আছে।

1) হোস্টে সরাসরি ফাইল সিস্টেম সম্পাদনা । এটি কিছুটা বিপজ্জনক এবং সম্ভবত কোনওটি ভুল হয় তার উপর নির্ভর করে ধারকটি সম্পূর্ণরূপে ভাঙার সম্ভাবনা রয়েছে।

২) স্টার্টআপ স্ক্রিপ্টটি এমন কিছুতে পরিবর্তন করা যা কখনই ব্যাশ শুরু করা, সংশোধন / সম্পাদনাগুলি করা এবং তারপরে পুনরায় স্টার্টআপ প্রোগ্রামটি পছন্দসইভাবে পরিবর্তন করা (নোডের মতো বা আগে যা ছিল) তেমন ব্যর্থ হয়।

আরো বিস্তারিত:

1) ব্যবহার

docker ps

চলমান পাত্রে বা

docker ps -a

সমস্ত পাত্রে (বন্ধ হওয়াগুলি সহ) এবং খুঁজে পেতে

docker inspect (containername)

প্রথম মানগুলির মধ্যে একটি "আইডি" সন্ধান করুন।

এটি এমন একটি অংশ যা বাস্তবায়নের বিশদটি ধারণ করে এবং পরিবর্তিত হতে পারে, সচেতন হন যে আপনি এইভাবে আপনার ধারকটি হারাতে পারেন।

যাও

/var/lib/docker/aufs/diff/9bc343a9..(long container id)/

এবং সেখানে আপনি সমস্ত ফাইল পাবেন যা কনটেইনারটির উপর ভিত্তি করে চিত্রের দিকে পরিবর্তিত হয়েছে। আপনি ফাইলগুলিকে ওভাররাইট করতে, ফাইল যুক্ত করতে বা সম্পাদনা করতে পারেন।

আবার, আমি এটি সুপারিশ করব না।

২) https://stackoverflow.com/a/32353134/586754 তে বর্ণিত হিসাবে আপনি এই জাতীয় পথে একটি কনফিগারেশন json config.json পেতে পারেন

/var/lib/docker/containers/9bc343a99..(long container id)/config.json

সেখানে আপনি উদাহরণগুলি "নোডেজ অ্যাপ.জেএস" থেকে "/ বিন / বাশ" এ পরিবর্তন করতে পারেন b এখন ডকার পরিষেবাটি পুনরায় চালু করুন এবং ধারকটি শুরু করুন (আপনার এখন দেখা উচিত যে এটি এখন সঠিকভাবে শুরু হয়েছে)। আপনার ব্যবহার করা উচিত

docker start -i (containername)

এটি সরাসরি ছেড়ে না যায় তা নিশ্চিত করার জন্য। আপনি এখন ধারকটির সাথে কাজ করতে পারেন এবং / বা পরে সংযুক্ত করতে পারেন

docker exec -ti (containername) /bin/bash

এছাড়াও, ডকার সিপি কনটেইনারটির বাইরে সম্পাদিত ফাইলগুলি অনুলিপি করার জন্য দরকারী।

এছাড়াও, কেবলমাত্র সেই পদক্ষেপগুলিতেই ফিরে যেতে হবে যদি ধারক আরও বেশি বা কম "হারিয়ে" যায় তবে কোনও পরিবর্তনই উন্নতি হতে পারে।


তবুও উত্তরের উত্তরের প্রত্যাশায় - তাই নির্দ্বিধায় একটি উত্তর দিন, আমি পাশাপাশি "আনসারড" ট্যাগটি সরিয়ে দেব।
আন্দ্রেয়াস রিফ

আমি দ্বিতীয় উপায়ে ব্যবহার করেছি এবং config.jsonফাইলগুলি যখনই আমি সম্পাদনা করেছি ততবার ওভাররাইটিংয়ের জন্য বাধ্য করতে আমাকে ডকার পরিষেবাটি পুনরায় চালু করতে হয়েছিল
ভিটিলি evশাভ

4
আমার কাছে config.v2.json আছে এবং যতবারই আমি জম্বি ধারকটি শুরু করি, এটি আমার পথ / এন্ট্রিপয়েন্ট আপডেটটি ফিরিয়ে দেয় এবং আবার একবার মারা যায়। "ডকার সিপি" ব্যবহার করে এন্ট্রিপয়েন্ট.এসটি স্ক্রিপ্ট আপডেট করার জন্য কেবল বাশ চালানোর জন্য এটি ঠিক করা হয়েছে।
কর্টিস ইয়ালাপ

@ কার্টিস ইলাপ আমি একই জিনিসটি অনুভব করছি। কীভাবে সমাধান করলেন?
ব্রেট ম্যাকলাইন 22

4
@ ব্রেটম্যাকলাইন আমি হোস্টে এডিট করার পরিবর্তে ডকার সিপি ব্যবহার করেছি। এটি পছন্দ করুন: এন্ট্রি পয়েন্ট স্ক্রিপ্টের অবস্থানটি সন্ধান করুন: "ডকার পরিদর্শনকারী ধারক_নাম | গ্রেপ এন্ট্রি"। স্ক্রিপ্ট পান: "ডকার সিপি ধারক_নাম: /entryPoint.sh ./"। (এটি সম্পাদনা করুন) স্ক্রিপ্টটিকে পাত্রে রাখুন: "ডকার সিপি এন্ট্রিপয়েন্ট.শ ধারক_নাম: /entryPoint.sh"। আপনি এন্ট্রি পয়েন্ট রান বাশ করতে পারেন বা একটি স্লিপ লুপ চালাতে পারেন যেমন "যখন:; ঘুম 10; সম্পন্ন"। প্রথম স্ক্রিপ্ট লাইনটি "#! / বিন / বাশ" হওয়া দরকার।
কার্টিস ইয়ালাপ

9

আপনি সরাসরি কনটেইনার ফাইল-সিস্টেম সম্পাদনা করতে পারেন, তবে আমি জানি না এটি ভাল ধারণা কিনা। প্রথমে আপনাকে ডিরেক্টরিটির পথটি সন্ধান করতে হবে যা ধারকটির জন্য রানটাইম রুট হিসাবে ব্যবহৃত হয়। চালান docker container inspect id/nameUpperDirজেএসএন আউটপুটে কীটি সন্ধান করুন।

এটি আপনার ডিরেক্টরি।


ডিরেক্টরিটি খুঁজে পেয়েছে তবে এতে সমস্ত ফাইল নেই।
আইয়ুব

এটি ওভারলেএফএস, সুতরাং আপনার ফাইলগুলি অবশ্যই সেই ডিরেক্টরিগুলির মধ্যে একটিতে থাকা উচিত।
তেজাস সরদে

ডিরেক্টরিটির নাম "আপারডিয়ার" এর চেয়ে আলাদা হতে পারে, উদাহরণস্বরূপ, আমার ক্ষেত্রে এটি উত্স। কিন্তু এটা কাজ!
রজনী কেওলানি

0

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

  1. প্রবেশদ্বারটি খুঁজে পেতে ডকার পরিদর্শন ব্যবহার করুন (কয়েকটি সংস্করণে পাথের নাম দেওয়া হয়েছে)
  2. ব্যবহার করে ডকার রানের একটি ক্লোন তৈরি করুন
  3. ডকার এক্সিকি -টি বাশ ব্যবহার করে ক্লোন প্রবেশ করান (যদি * নিক্স ধারক)
  4. ক্লোনটি সন্ধানের জন্য সন্ধান করেও এন্ট্রিপয়েন্ট ফাইলের অবস্থান সন্ধান করুন
  5. ডকার সিপি ব্যবহার করে পুরানো এন্ট্রিপয়েন্ট স্ক্রিপ্টটি অনুলিপি করুন: ./
  6. উদাহরণস্বরূপ একটি নতুন এন্ট্রিপয়েন্ট স্ক্রিপ্ট সংশোধন করুন বা তৈরি করুন

    #!/bin/bash tail -f /etc/hosts

  7. স্ক্রিপ্টের কার্যকর করার অধিকার রয়েছে তা নিশ্চিত করুন
  8. ডকার সিপি ./: ব্যবহার করে পুরানো এন্টিপয়েন্টটি প্রতিস্থাপন করুন:
  9. স্টার্ট ব্যবহার করে পুরানো পাত্রে শুরু করুন
  10. শুরু না হওয়া পর্যন্ত 6-9 ধাপগুলি পুনরায় করুন
  11. ধারক মধ্যে সমস্যা ঠিক করুন
  12. প্রয়োজনে এন্টিপয়েন্টটি পুনরুদ্ধার করুন এবং 6-9 ধাপগুলি প্রয়োজনীয় হিসাবে পুনরায় করুন
  13. প্রয়োজনে ক্লোনটি সরান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.