ডকার পাত্রে রাখার সঠিক উপায়টি যখন এটি পর্যায়ক্রমিক কাজের জন্য ব্যবহৃত হয় তখনই শুরু হয়


41

আমার ইনস্টলড এবং কনফিগার করা সফ্টওয়্যার সহ ডকারের ধারক রয়েছে।

সার্বক্ষণিকভাবে চালু / পরিচালিত হওয়ার মতো কোনও প্রোগ্রাম নেই।

আমি যা চাই - বাহ্যিক ইভেন্টের উপর নির্ভর করে কিছু কমান্ড শুরু করার ক্ষমতা। মত:

docker exec mysupercont /path/to/mycommand -bla -for

এবং

docker exec mysupercont /path/to/myothercommand 

কনটেইনার বন্ধ করা হলেও "এক্সিকিউটিভ" অসম্ভব, এবং এই ধারকটির ভিতরে কিছু "कार्यरत" ডেটা রয়েছে, যা সেই আদেশগুলির জন্য ব্যবহৃত হয়েছিল, তাই আমি ব্যবহার করতে পারি না

docker run ...

প্রতিবার, কারণ এটি চিত্র থেকে ধারক পুনরায় তৈরি করে এবং আমার ডেটা ধ্বংস করে।

এই ধরণের পাত্রে চালিত রাখার "সঠিক" এবং "সেরা" উপায় কী? ভিতরে কোন আদেশটি শুরু করতে পারি?


এটি একটি খুব ভালভাবে ব্যাখ্যা করা প্রশ্ন। অনুরূপ অন্য পোস্টটি এখানে দেখুন
গ্রান্ট লি

1
docker run -d --name=name container tail -f /dev/null
স্টিম্পওয়ার্ড হয়েছে

উত্তর:


46

আপনার প্রতিবার পারফর্ম করার দরকার নেই docker run

docker run আসলে দুটি কমান্ডের অনুক্রম: "তৈরি" এবং "শুরু"।

আপনি যখন ধারকটি চালাবেন, আপনাকে অবশ্যই " -it" নির্দিষ্ট করতে হবে :

-আই, --আইনটেক্টিভ = ভুয়া এসটিডিআইএন সংযুক্ত না থাকলেও খোলা রাখুন
-t, --ટ્টি = মিথ্যা সিউডো-টিটিওয়াই বরাদ্দ করুন

উদাহরণ:

docker run -it debian:stable bash

কাজ শেষ হওয়ার পরে শুরুতে কমান্ড নির্দিষ্ট করা হয়েছে (আমার উদাহরণে বাশ)। উদাহরণস্বরূপ, আপনি "প্রস্থান" সম্পাদন করেন। ধারক স্টপস:

CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS                     PORTS               NAMES
1329c99a831b        debian:stable              "bash"                 51 seconds ago      Exited (0) 1 seconds ago                       goofy_bardeen

এখন আপনি এটি আবার শুরু করতে পারেন

docker start 1329c99a831b

ধারকটি শুরু হয়েছে এবং আবার "বাশ" কমান্ডটি কার্যকর করে।
কমান্ডটি দিয়ে এই সেশনে "বশ" সংযোগ করুন

docker attach 1329c99a831b

সংক্ষেপে : আপনাকে runএবং startধারকটির মধ্যে পার্থক্য বুঝতে হবে ।
এছাড়াও, "রান" এর জন্য পরামিতি " " এবং " " এর ভূমিকার জন্য ডকুমেন্টেশন দেখুন-i t-d


1
আহা, আমি এটা বুঝতে পারি। প্রশ্নটি ছিল: আমার ধারকটির ভিতরে চালানোর কিছুই নেই, তবে আমার এটি "চালানো" অবস্থায় রাখতে হবে তাই আপনার উত্তরটি হল - চালক অবস্থায় চালানোর জন্য বাশ ব্যবহার করবেন?
কর্জাভিন ইভান

হ্যাঁ.আপনি রান চলাকালীন যে প্রক্রিয়াটি নির্দিষ্ট করেছেন তা অবশ্যই পাত্রে চালিয়ে চলতে হবে। এর সহজ উদাহরণ বাশ। সম্ভবত আপনি "-d" দিয়ে ধারকটি শুরু করার সহজ উপায় এবং এটি ব্যবহার করে প্রয়োজনীয় হিসাবে সংযুক্ত করতে পারেন docker attach ID। বাশ শেষ না করে এই সেশন থেকে বেরিয়ে CTRL-p CTRL-q
আসুন

ধারক রান চলাকালীন আপনি যে প্রক্রিয়াটি নির্দিষ্ট করেন তা পিআইডি 1 পায়
ly তদনুসারে

শুরু এবং সংযুক্তির সাথে আমার অভিজ্ঞতা (বা -ai দিয়ে শুরু করুন) হ'ল আপনার কমান্ড লাইনের প্রম্পট এবং ইন্টারেক্টিভ সম্পাদনাটি প্রদর্শিত হচ্ছে না। EG tty রেন্ডারিং বা প্রতিধ্বনিত হয় না।
dlamblin

1
এটা নিফটি। নোট করুন যে আপনি যদি পটভূমিতে ম্যানুয়ালি আবার এটি না করেই পাত্রে শুরু করতে চান (যদি আপনি কোনও ওয়েব সার্ভিস চালাচ্ছেন তবে বলুন), '-আইডিডি' প্যারামিটার এবং সিটিআরএল-সি সিটিআরএল-কি ব্যবহার না করেই আলাদা করতে পারেন ধারক।
তারানাকি

6

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

তবে তরণাকীর শেষ মন্তব্য, '-আইডিডি' ব্যবহার করুন, যা ডকার আদেশ করেছিলেন বলে মনে হয়।

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


2
+1 "ডোকর যা আদেশ করেছিল তা বলে মনে হচ্ছে" :-)
ম্যাট আলেকজান্ডার

5

যেহেতু আপনি পর্যায়ক্রমিক কাজগুলি উল্লেখ করেছেন এবং আপনি সম্ভবত যেভাবে ব্যবহার করতে চান সেই কারণে ক্রোন জাতীয় কিছু ব্যবহার করছেন docker exec, আপনার কাছে আমার কাছে কেবল ওষুধ রয়েছে। কমপক্ষে আমি এই জাতীয় কিছু করে শেষ করেছি।

  1. Dockerfile

    FROM <some base>
    CMD tail -f /dev/null
    
  2. স্বাভাবিকের সাথে চালান docker run -d ....(আমি ব্যবহৃত docker-compose)

  3. হোস্ট মেশিনগুলি ক্রন্টব সেটআপ করুন, উদাহরণস্বরূপ:

    * * * * * docker exec mysupercont foo >> /var/log/foo.log 2>&1
    * * * * * docker exec mysupercont bar >> /var/log/bar.log 2>&1
    

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


0

লেজ এখনও সময়ে সময়ে কিছু ফাইল অপারেশন ঘটায়।

কোনও প্রতিক্রিয়া ছাড়াই চিরকাল ঘুমানোর জন্য আমার সমাধানটি এখানে is

# Ah, ha, ha, ha, stayin' alive...
while true; do :; done & kill -STOP $! && wait $!

কিভাবে এটা কাজ করে

while true; do :; done & # do nothing(:) in background, in an endless loop
kill -STOP $!            # stop the background process of doing nothing
wait $!                  # wait forever, because doing nothing process is stopped

1
এটি কি করছে তা বোঝা শক্ত। কেন শুধু 3650 ডি ঘুমাবেন না
পিটার

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