আমি ডকার পাত্রে শেল দেওয়ার পরে কীভাবে একটি ফাইল সম্পাদনা করব?


516

আমি সফলভাবে একটি ডকারের ধারকটি ব্যবহার করে এটি ব্যবহার করেছি:

docker exec -i -t 69f1711a205e bash

এখন আমাকে ফাইল সম্পাদনা করতে হবে এবং আমার ভিতরে কোনও সম্পাদক নেই:

root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#

আমি কীভাবে ফাইলগুলি সম্পাদনা করব?


@ আপেল আমি সঙ্গম / পোস্টগ্রিস-বিডব্লিউ ব্যবহার করি: 0.1
ইগোর বারিনভ

2
@ আপেল অ্যাপ্লিকেশন - উইম কাজ ইনস্টল করুন। ধন্যবাদ!
ইগোর বারিনভ 21

3
তাহলে কেন Dockerfileঅ্যাপটি-গেট ইনস্টল কমান্ডটি অন্তর্ভুক্ত করবেন না এবং আপনার নিজের ধারক তৈরি করবেন? ডকারের ধারকটি আপনার উপায় হিসাবে নয় এটি ডিজাইন করা হয়েছে।
বিএমডাব্লু

1
ডকারের পরীক্ষামূলক সম্পাদকের ইজারাতে ইনস্টল করা উচিত, কমপক্ষে কমপক্ষে
ভিএম

উত্তর:


721

মতামত হিসাবে, কোনও ডিফল্ট সম্পাদক সেট নেই - অদ্ভুত - $EDITORপরিবেশ পরিবর্তনশীল খালি। আপনি এটি দিয়ে একটি ধারকটিতে লগ ইন করতে পারেন:

docker exec -it <container> bash

এবং চালান:

apt-get update
apt-get install vim

বা নিম্নলিখিত ডকফেরাইল ব্যবহার করুন:

FROM  confluent/postgres-bw:0.1

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]

ডকার চিত্রগুলি বেয়ার ন্যূনতমে ছাঁটাই করা হয় - তাই কোনও শিপড কনটেইনার সহ কোনও সম্পাদক ইনস্টল করা হয়নি is এজন্য ম্যানুয়ালি এটি ইনস্টল করার প্রয়োজন আছে।

সম্পাদনা

আমি আপনাকে বিষয়টি সম্পর্কে আমার পোস্ট পড়তে উত্সাহিত করি ।


3
আপনার যা প্রয়োজন তা একটি ভলিউম মাউন্ট করা হচ্ছে: ডকস.ডোকার.com
ওপাল

15
এটি করার জন্য আমার রুট হিসাবে লগইন করা দরকার docker exec -u 0 -it container_name bash
ইঞ্জি। ফুয়াদ

34
ডকারের মতো, vim-tinyপরিবর্তে সম্ভবত ইনস্টল করা ভাল ।
ryenus

2
হতে পারে আপনি সংযুক্ত প্রতিটি ধারকটিতে সম্পাদক ইনস্টল না করার কথা বিবেচনা করতে পারেন, তবে ডকার হোস্ট মেশিনে কেবল একবার। অন্যান্য ভাষ্যকারগণ উল্লিখিত হিসাবে আপনি ভলিউমটি মাউন্ট করতে পারেন, তাই আপনি যে ফাইলগুলি মাউন্ট হতে চলেছেন তা সম্পাদনা করতে পারেন বা নিজেই ধারক ডেটাতে নেভিগেট করতে এবং ফাইলগুলি সম্পাদনা করতে পারেন/var/lib/docker/
পিট

4
আমি কেবল একটি কনফিগারেশনটি সত্য থেকে মিথ্যা কনটেইনারে পরিবর্তন করতে চেয়েছিলাম। apt-getধারক ভিতরে অনুমতি ইস্যু কারণে কাজ করে না, তাই আমি চেষ্টা sed -i 's/texttobechanged/textwanted/g' filename। এটা আমার জন্য কাজ করেছে।
অমরেশ ত্যাগী

420

আপনি যদি কয়েকটি সংক্ষিপ্ত পরিবর্তন (যেমন টমক্যাট কনফিগারেশন পরিবর্তন করুন) করতে কোনও সম্পাদক যুক্ত করতে চান না, আপনি কেবল ব্যবহার করতে পারেন:

docker cp <container>:/path/to/file.ext .

যা এটি আপনার স্থানীয় মেশিনে অনুলিপি করে (আপনার বর্তমান ডিরেক্টরিতে)। তারপরে আপনার প্রিয় সম্পাদকটি ব্যবহার করে স্থানীয়ভাবে ফাইলটি সম্পাদনা করুন এবং তারপরে একটি করুন

docker cp file.ext <container>:/path/to/file.ext

পুরানো ফাইল প্রতিস্থাপন।


21
@ ইগোর এটি কার্যকরভাবে গ্রহণযোগ্য সমাধান হওয়া উচিত কারণ এটি আপনার পাত্রে অতিরিক্ত প্যাকেজ যুক্ত না করেই এটি করার সঠিক উপায়, যখন প্যাকেজ যুক্ত করা গৌণ সমাধান হতে হবে।
রাউথিনেটর

1
উইন্ডোজ প্ল্যাটফর্মগুলির জন্য, আপনি ব্যবহার করতে পারেন, উদাহরণস্বরূপ: docker cp <container>:C:\inetpub\wwwroot\Web.config .এবং docker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
রোজবার্গ

1
পরীক্ষার উদ্দেশ্যে ভাল কাজ! আমি এটি উত্পাদন করতে সুপারিশ করবেন না।
মিশাল স্পেক

9
এবং আপনি উত্পাদন জন্য কি সুপারিশ করবেন? লোকেরা কি উত্পাদনে ইন্টারেক্টিভভাবে একটি পাত্রে ফাইলগুলি সম্পাদনা করা উচিত?
lucid_dreamer

4
এই পদ্ধতিটি লক্ষ্য করার মতো ফাইলের মালিকানা বদলে যায়। রুট ( docker exec -u 0 -it mycontainer bash) হিসাবে এবং তারপরে একটি chownকমান্ড চালিয়ে কিছুটা স্পষ্টতার সাথে এটির পরে পরিবর্তন করা উচিত idd
স্টিভ চেম্বারস

91

catএটি ইনস্টল করা থাকলে আপনি ব্যবহার করতে পারেন , এটি খালি / কাঁচা ধারক না হলে সম্ভবত এটি ঘটবে। এটি একটি চিমটিতে কাজ করে এবং ঠিক আছে যখন স্থানীয়ভাবে কোনও উপযুক্ত সম্পাদককে অনুলিপি করা হবে।

cat > file
# 1. type in your content
# 2. leave a newline at end of file
# 3. ctrl-c / (better: ctrl-d)
cat file

catএকটি নতুন লাইন পাওয়ার জন্য প্রতিটি লাইন আউটপুট হবে। শেষ লাইনের জন্য একটি নতুন লাইন যুক্ত করার বিষয়টি নিশ্চিত করুন। ctrl-c প্রেরণ করে aSIGINT বিড়ালকে গ্রেফতার করে প্রস্থান করার জন্য । মন্তব্যগুলি থেকে আপনি দেখতে পাচ্ছেন যে আপনি ফাইল-এর শেষ ("আর কোনও ইনপুট আসবে না") বোঝাতে ctrl-d টি চাপতে পারেন।

আরেকটি বিকল্প হ'ল এমন কিছু infilterযা কোনও পাত্রস যাদুতে ধারক নামের জায়গাতে কোনও প্রক্রিয়া সংক্রামিত করে: https://github.com/yadutaf/infilter


3
অন্তর্নিহিত অনুমতি সংক্রান্ত সমস্যা থাকলে এটি এতটাই অবিশ্বাস্যরূপে কার্যকর!
রোমান

17
ctrl+Dচেয়ে ভাল ctrl+Cctrl+Dএকটি পাঠায় EOF। শেষে আপনাকে অতিরিক্ত নিউলাইন যুক্ত করার দরকার নেই। সহ ctrl+C, আপনি যদি নতুন লাইন যুক্ত করতে ভুলে যান তবে আপনি শেষ লাইনটি হারাবেন!
উইসবাকি

1
@ উইসবাকি চমৎকার! আর ভালো. যদিও দু'বার সিটিআরএল-ডি করা দরকার।
meijsermans

52

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

vim scp://remoteuser@containerip//path/to/document

2
ধন্যবাদ. আমি এই লিঙ্কটি ছেড়ে যেতে চেয়েছিলাম যা vim scp:// vim.wikia এর আরও ভাল ব্যাখ্যা করে । এছাড়াও, আপনার ধারকের আইপি ঠিকানা পেতে, আপনি ব্যবহার করতে পারেনsudo docker inspect <container_id> | grep "IPAddress"
@ জেটহর্ন

1
কেবল ভাবছি, আমি কি আক্ষরিক অর্থে "রিমোটিউজার" বা "ডকার" ব্যবহার করি? আমি চেষ্টা করেছি: vim scp://docker@172.17.0.17//data/gitea/conf/app.iniপাশাপাশি vim scp://remoteuser@172.17.0.17//data/gitea/conf/app.iniএবং উভয়ই একটি নতুন, ফাঁকা ফাইল তৈরি করে।
জে স্কট এলেবিলিন

1
@ J.ScottElblein এর জন্য sshপ্রথমে আপনার ডকার ধারকটিতে কনফিগার করা প্রয়োজন । দেখুন blog.softwaremill.com/... । তবে আপনি সাধারণত নিজের ধারকটিতে ইনস্টল করতে চান না ssh
উইসবাকি

14

কিছু সময় আপনাকে অবশ্যই প্রথমে কন্টেইনারটি চালাতে হবে root:

docker exec -ti --user root <container-id> /bin/bash

তারপরে কনটেইনারটিতে, ভিম বা অন্য কিছু ইনস্টল করতে:

apt-get install vim

7

আমি "ডকার রান" ("ডকার এক্সিকিউট" নয়) ব্যবহার করি এবং আমি একটি সীমাবদ্ধ অঞ্চলে থাকি যেখানে আমরা সম্পাদক ইনস্টল করতে পারি না। তবে ডকার হোস্টে আমার একটি সম্পাদক আছে।

আমার কার্যকারণ হ'ল: ডকার হোস্ট থেকে ধারক ( https://docs.docker.com/engine/references/run/#/volume-shared-files systemms ) এ একটি ভলিউম বাঁধুন এবং কনটেইনারটির বাইরে ফাইলটি সম্পাদনা করুন। দেখে মনে হচ্ছে:

docker run -v /outside/dir:/container/dir

এটি বেশিরভাগই পরীক্ষার জন্য এবং পরে চিত্রটি তৈরি করার সময় আমি ফাইলটি পরিবর্তন করতাম।


6

আপনি ডকার পাত্রে শেল করার পরে, কেবল টাইপ করুন:

apt-get update
apt-get install nano

6

আপনি বিদ্যমান ফাইলটি দিয়ে এটি খুলতে পারেন

cat filename.extension

এবং ক্লিপবোর্ডে বিদ্যমান সমস্ত পাঠ্য অনুলিপি করুন।

তারপরে পুরানো ফাইলটি মুছুন

rm filename.extension

বা এর সাথে পুরানো ফাইলটির নতুন নাম দিন

mv old-filename.extension new-filename.extension

এর সাথে নতুন ফাইল তৈরি করুন

cat > new-file.extension

তারপরে ক্লিপবোর্ডে অনুলিপি করা সমস্ত পাঠ্য পেস্ট করুন, টিপে টিপুন Enterএবং সেভ করে প্রস্থান করুন ctrl+z। এবং voila কোন ধরণের সম্পাদক ইনস্টল করার প্রয়োজন নেই।


5

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

docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py

1
কিভাবে যে প্রশ্নের উত্তর দেয়? - "আমি কীভাবে ফাইলগুলি সম্পাদনা করব?"
পিটার মর্টেনসেন

4

সাধারণ সম্পাদনা ক্রিয়াকলাপগুলির জন্য আমি ইনস্টল করতে পছন্দ করি vi( ভিআইএম-ক্ষুদ্র ), যা কেবল 1491 কেবিnano ব্যবহার করে বা 1707 কেবি ব্যবহার করে

অন্যদিকে 28.9 মেগাবাইটvim ব্যবহার করে

আমাদের মনে রাখতে হবে যে apt-get installকাজ করার জন্য , আমাদের updateপ্রথমবারটি করতে হবে , তাই:

apt-get update
apt-get install vim-tiny

সি এল এলিতে সম্পাদক শুরু করতে আমাদের প্রবেশ করতে হবে vi


2

যদি আপনি উইন্ডোজ ধারক ব্যবহার করেন এবং আপনি যে কোনও ফাইল পরিবর্তন করতে চান তবে আপনি পাওয়ার শেল কনসোলটিতে ভিমটি পেতে এবং সহজেই ব্যবহার করতে পারেন।

পাওয়ারশেলের সাহায্যে উইন্ডোজ ডকার পাত্রে শেল করতে:

docker exec -it <name> powershell

  • প্রথমে চকোলেটি প্যাকেজ ম্যানেজারটি ইনস্টল করুন

    Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;

  • Vim ইনস্টল করুন

    choco install vim

  • পরিবেশগত বৈচিত্রময় রিফ্রেশ করুন আপনি ঠিক ধারকটিতে exitধারক করতে পারেন shell

  • ফাইল লোকেশন যান এবং এটি Vim vim file.txt


1

এটি ধরণের স্ক্রুযুক্ত, তবে একটি চিম্টিতে আপনি ব্যবহার করতে পারেন sedবা awkছোট সম্পাদনা করতে পারেন বা পাঠ্য সরাতে পারেন। আপনার রেগেক্স লক্ষ্যগুলি অবশ্যই সাবধান থাকুন এবং সচেতন হন যে আপনি সম্ভবত আপনার ধারকটিতে রয়েছেন এবং rootঅনুমতিগুলি পুনরায় সামঞ্জস্য করতে হতে পারে।

উদাহরণস্বরূপ, একটি সম্পূর্ণ রেখা অপসারণ যা একটি রেজেক্সের সাথে মেলে পাঠ্য সহ:

awk '!/targetText/' file.txt > temp && mv temp file.txt

(আরও)



1

জায়গায় স্ট্যাক ওভারফ্লো প্রশ্ন সেড সম্পাদনা ফাইল দেখুন

এটি এখানে একটি ভাল বিকল্প হবে, যদি:

  1. একটি বড় ফাইল পরিবর্তন করতে, এটি ব্যবহার করা অসম্ভব cat
  2. ইনস্টল ভিম অনুমোদিত নয় বা খুব বেশি সময় নেয়। আমার অবস্থা মাইএসকিউএল 5.7 ইমেজ ব্যবহার করছে যখন আমি পরিবর্তন করতে চান my.cnfফাইল, সেখানে নেই vim, viঅত্যন্ত দীর্ঘ (চীন গ্রেট ফায়ারওয়াল), এবং তেজ ইনস্টল লাগে। sedছবিতে সরবরাহ করা হয়, এবং এটি বেশ সহজ। আমার ব্যবহার মত

    sed -i /s/testtobechanged/textwanted/g filename

    man sedআরও জটিল ব্যবহারের জন্য অন্যান্য টিউটোরিয়াল ব্যবহার বা সন্ধান করুন ।


1

ক্যার্যাকটার catসহ আপনি ইনস্টল থাকলে ব্যবহার করতে পারেন >। হেরফেরটি এখানে:

cat > file_to_edit
#1 Write or Paste you text
#2 don't forget to leave a blank line at the end of file
#3 Ctrl + C to apply configuration

এখন আপনি কমান্ড দিয়ে ফলাফল দেখতে পাবেন

cat file

0

আপনি একটি বিশেষ ধারকও ব্যবহার করতে পারেন যা কেবলমাত্র আপনার প্রয়োজন কমান্ডটি ধারণ করবে: ভিম। আমি পাইথন-ভিম বেছে নিয়েছি । এটি ধরে নিয়েছে যে আপনি যে ডেটাটি সম্পাদনা করতে চান তা নিম্নোক্ত ডকফায়াইল দিয়ে তৈরি ডেটা ধারকটিতে রয়েছে:

FROM debian:jessie
ENV MY_USER_PASS my_user_pass
RUN groupadd --gid 1001 my_user
RUN useradd -ms /bin/bash --home /home/my_user \
            -p $(echo "print crypt("${MY_USER_PASS:-password}", "salt")" | perl) \
            --uid 1001 --gid 1001 my_user
ADD src /home/my_user/src
RUN chown -R my_user:my_user /home/my_user/src
RUN chmod u+x /home/my_user/src
CMD ["true"]

আপনি কোনও ডকার ভলিউম (src_volume) মাউন্ট করে আপনার ডেটা সম্পাদনা করতে সক্ষম হবেন যা আপনার ডেটা ধারক (src_data) এবং পাইথন-ভিম ধারক দ্বারা ভাগ করা হবে।

docker volume create --name src_volume
docker build -t src_data .
docker run -d -v src_volume:/home/my_user/src --name src_data_1 src_data
docker run --rm -it -v src_volume:/src fedeg/python-vim:latest

এইভাবে, আপনি আপনার পাত্রে পরিবর্তন করবেন না। আপনি এই কাজের জন্য একটি বিশেষ ধারক ব্যবহার করুন।

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