hub - docker tutorial




আমি ইতিমধ্যে বিদ্যমান ডকার কন্টেইনারে কোন কমান্ড চালাতে পারি? (12)

আমি -d সাথে একটি কন্টেইনার তৈরি করেছি যাতে এটি ইন্টারেক্টিভ না।

docker run -d shykes/pybuilder bin/bash

আমি পাত্রে বহিষ্কৃত হয়েছে যে দেখতে:

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES
d6c45e8cc5f0        shykes/pybuilder:latest   "bin/bash"          41 minutes ago      Exited (0) 2 seconds ago                        clever_bardeen

এখন আমি মেশিনে মাঝে মাঝে কমান্ড চালাতে এবং প্রস্থান করতে চাই। শুধু প্রতিক্রিয়া পেতে।

আমি মেশিন শুরু করার চেষ্টা করেছিলাম। আমি সংযুক্ত করার চেষ্টা। আমি ভেবেছিলাম আমি একটি ধারক সঙ্গে run পারে, কিন্তু যে অনুমতি দেওয়া বলে মনে হচ্ছে না। start ব্যবহার শুধু সঞ্চালিত বলে মনে হয় এবং তারপর দ্রুত বিদ্যমান।

আমি প্রস্থান করার পর ইন্টারেক্টিভ মোডে ফিরে পেতে চাই।

আমি চেষ্টা করেছিলাম:

docker attach d6c45e8cc5f0

কিন্তু আমি পেয়েছি:

2014/10/01 22:33:34 You cannot attach to a stopped container, start it first

কিন্তু আমি যদি এটি শুরু করি তবে তা যাই হোক না কেন। ক্যাচ 22. আমি জিততে পারি না।


Katrmr এর উত্তরটি প্রসারিত করার জন্য, যদি কন্টেইনারটি বন্ধ হয়ে যায় এবং কোনও ত্রুটির কারণে এটি শুরু করা না যায় তবে আপনাকে এটি একটি চিত্রতে প্রেরণ করতে হবে। তারপরে আপনি নতুন ছবিতে বাশ চালু করতে পারেন:

docker commit [CONTAINER_ID] temporary_image
docker run --entrypoint=bash -it temporary_image

অক্টোবর ২014-এ ডকার দলটি docker exec কমান্ডটি চালু করেছে : https://docs.docker.com/engine/reference/commandline/exec/

সুতরাং এখন আপনি কোন আইডি (বা নাম) জানাতে চলমান পাত্রে কোনও কমান্ড চালাতে পারেন:

docker exec -it <container_id_or_name> echo "Hello from container!"

উল্লেখ্য যে exec কমান্ড শুধুমাত্র চলমান কন্টেইনারে কাজ করে। কন্টেইনারটি বর্তমানে বন্ধ থাকলে, আপনাকে প্রথমে এটির সাথে নিম্নলিখিত কমান্ডটি চালাতে হবে:

docker run -it -d shykes/pybuilder /bin/bash

এখানে সবচেয়ে গুরুত্বপূর্ণ জিনিস -d বিকল্প, যা detached জন্য দাঁড়িয়েছে। এর অর্থ হল যে আপনি প্রথমে কন্টেইনারে ( /bin/bash ) সরবরাহকৃত কমান্ডটিকে পটভূমিতে চালানো হবে এবং কন্টেইনারটি অবিলম্বে থামবে না


আপনি শেল স্ক্রিপ্ট চালানোর চেষ্টা করছেন, আপনি এটি ব্যাশ হিসাবে চালানোর প্রয়োজন (Velop উত্তর উপর ভিত্তি করে)।

docker exec -it containerid bash -c /path/to/your/script.sh

আমার কমান্ড চালানোর জন্য ব্যাশ-সি ব্যবহার করতে হয়েছিল: docker exec -it CONTAINER_ID bash -c "mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql"


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

এটি করার জন্য আমি কন্টেইনারের ভিতরে চলমান কমান্ড প্রম্পট বা কন্টেইনারে সংযুক্ত করার জন্য নিম্নলিখিত ডকার এন্ট্রিপয়েন্ট কমান্ড ব্যবহার করি।

ENTRYPOINT ["C:\\Windows\\System32\\cmd.exe", "-D", "FOREGROUND"]

যে কমান্ড প্রম্পট ধারক সংযুক্ত করা এবং ধারক একটি লাইভ রাখা উভয় আমাকে সাহায্য। :)


একটি ধারক তৈরি এবং কমান্ড পাঠানো, এক এক করে:

docker create --name=my_new_container -it ubuntu
docker start my_new_container
// ps -a says 'Up X seconds'
docker exec my_new_container /path/to/my/command
// ps -a still says 'Up X+Y seconds'
docker exec my_new_container /path/to/another/command

এটি উপরের একটি সিডিআর এলডিএন উত্তর এবং আমি here পাওয়া উত্তরটি ব্যবহার করে তৈরি একটি সম্মিলিত উত্তর।

নিচের উদাহরণটি একটি চিত্র থেকে একটি আর্কি লিনাক্স কন্টেইনার শুরু করে এবং তারপর pacman টুলটি ব্যবহার করে সেই pacman git ইনস্টল করে:

sudo docker run -it -d archlinux /bin/bash
sudo docker ps -l
sudo docker exec -it [container_ID] script /dev/null -c "pacman -S git --noconfirm"

যে সব।


চিত্রটিকে ডিফল্ট এন্ট্রিপয়েন্ট /bin/sh -c ব্যবহার করে ধরে নেওয়া হচ্ছে, চলমান /bin/bash ডেমন মোডে ( -d ) মোডে অবিলম্বে প্রস্থান করবে। যদি আপনি এই কন্টেইনারটি একটি ইন্টারেক্টিভ শেল চালাতে চান তবে -it পরিবর্তে -it ব্যবহার করুন। আপনি যদি কনটেইনারে অন্য কোনও প্রক্রিয়া নির্বাহ করতে ইচ্ছাকৃত কমান্ডগুলি চালাতে চান তবে আপনি nsenter বা nsinit চেষ্টা করতে পারেন। বিস্তারিত জানার জন্য https://blog.codecentric.de/en/2014/07/enter-docker-container/ এ দেখুন।


দুর্ভাগ্যবশত এটি লক্ষ্য অর্জনের জন্য docker run --entrypoint সঙ্গে আর্গুমেন্ট সঙ্গে ENTRYPOINT override অসম্ভব।

দ্রষ্টব্য: আপনি --entrypoint ব্যবহার করে ENTRYPOINT সেটিংকে ওভাররাইড করতে পারেন তবে এটি বাইনারিটিকে কার্যকর করতে পারে (কোন sh -c ব্যবহার করা হবে না)।


সহজ উত্তর: একই সময়ে শুরু এবং সংযুক্ত। এই ক্ষেত্রে আপনি ঠিক কি করছেন জন্য করছেন।

docker start <CONTAINER_ID/CONTAINER_NAME> && docker attach <CONTAINER_ID/CONTAINER_NAME> 

<CONTAINER_ID/CONTAINER_NAME> পরিবর্তন করতে ভুলবেন না


ম্যাকের জন্য:

$ docker exec -it <container-name> sh

আপনি রুট ব্যবহারকারী হিসাবে সংযোগ করতে চান:

$ docker exec -u 0 -it <container-name> sh

# docker exec -d container_id command 

উদা:

# docker exec -d xcdefrdtt service jira stop 




docker