ডকার চালান <IMAGE> <বহুবারের কম্যান্ডস>


254

আমি এই জাতীয় বহু কমান্ড চালানোর চেষ্টা করছি।

docker run image cd /path/to/somewhere && python a.py

তবে এটি আমাকে "এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" ত্রুটি দেয় কারণ এটি হিসাবে ব্যাখ্যা করা হয় ...

"docker run image cd /path/to/somewhere" && "python a.py"

দেখে মনে হচ্ছে "" বা () এর মতো কিছু ইস্ক্যাপ অক্ষর প্রয়োজন।

তাই আমি চেষ্টাও করেছি

docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)

কিন্তু এগুলি কার্যকর হয়নি।

আমি ডকার রান রেফারেন্সটি অনুসন্ধান করেছি তবে ইসক্যাপ অক্ষর সম্পর্কে কোনও ইঙ্গিত পাই না।

উত্তর:


439

ডকারে একাধিক কমান্ড চালানোর জন্য, /bin/bash -cসেমিকোলন ব্যবহার করুন;

docker run image_name /bin/bash -c "cd /path/to/somewhere; python a.py"

যদি কমান্ড 2 (পাইথন) প্রয়োজন হয় তা কার্যকর করা হবে এবং কেবলমাত্র যদি কমান্ড 1 (সিডি) শূন্য (কোনও ত্রুটি নেই) প্রস্থান স্থিতি ফিরে আসে, তার &&পরিবর্তে ব্যবহার করুন;

docker run image_name /bin/bash -c "cd /path/to/somewhere && python a.py"

আপনার ইঙ্গিত জন্য ধন্যবাদ! আমি সহজভাবে চেষ্টা করেছি [ডকার রান চিত্র "সিডি / বিন; এলএস"] এবং নিম্নলিখিত ত্রুটির বার্তা পেয়েছি। [এক্সিকিউট: "সিডি / বিন; এলএস": স্টাট সিডি / বিন; ls: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই] [ডেমন থেকে ত্রুটির প্রতিক্রিয়া: ধারক শুরু করা যায় না]
ai0307

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

14
docker run alpine sh -c "ls | wc >> xxx"এটি আমাকে অনেক সাহায্য করে, যখন ব্যাশ পাওয়া যায় না।
এডি হার্নান্দেজ

1
এই কাজ cdকিন্তু না যেখানে রিটার্ন কোড ব্যাপার ;একই নয় যেমন &&দেখতে unix.stackexchange.com/questions/37069/...
নিক Zalutskiy

1
ধন্যবাদ @ নিকজালুসকি, আপনার মন্তব্যের সাথে আপডেট উত্তর
anhlc

31

আপনি এটি বেশ কয়েকটি উপায়ে করতে পারেন:

  1. কার্যকারী ডিরেক্টরিটি পরিবর্তন করতে -w বিকল্পটি ব্যবহার করুন:

    -w, --workdir = "" ধারকটির ভিতরে কার্যকারী ডিরেক্টরি

    https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w

  2. পুরো যুক্তিটি / বিন / বাশকে দিন:

    docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
    

--workdirপ্রদত্ত লিঙ্কটিতে কোনও উল্লেখ নেই । পৃষ্ঠাটি সম্ভবত সরে / পরিবর্তিত হয়েছে। Docs.docker.com/engine/references/run/#workdir বা docs.docker.com/engine/references/commandline/run
marcv

10

আপনি ডকারের ধারকের ভিতরেও কমান্ডগুলি পাইপ করতে পারেন, bash -c "<command1> | <command2>"উদাহরণস্বরূপ:

docker run img /bin/bash -c "ls -1 | wc -l"

তবে, রিমোটে শেলটি না দিয়ে আউটপুটটি স্থানীয় টার্মিনালে পুনঃনির্দেশিত হবে।


3

আপনি যদি নিজের লোকাল মেশিনে ধারকটির বাইরে কোনও ফাইলে ফলাফল সংরক্ষণ করতে চান তবে আপনি এটির মতো কিছু করতে পারেন।

RES_FILE=$(readlink -f /tmp/result.txt)

docker run --rm -v ${RES_FILE}:/result.txt img bash -c "cat /etc/passwd | grep root > /result.txt"

আপনার আদেশগুলির ফলাফল /tmp/result.txtআপনার স্থানীয় মেশিনে পাওয়া যাবে।


2

আপনার সাথে একই কাজ করতে চাইছেন এমন অন্য যে কেউকে docker-composeকেবল bash -cউদ্ধৃতিতে একাধিক কমান্ড প্রিপেন্ড এবং বন্ধ করা দরকার , একসাথে যোগদান করুন &&

ওপিএস উদাহরণে docker-compose run image bash -c "cd /path/to/somewhere && python a.py"


এটি আমার জন্য কাজ করেছে তবে কমান্ড কার্যকর হওয়ার পরে ডকার প্রক্রিয়াটি প্রস্থান করে
নোড_ম্যান

এবং আমি কীভাবে এই জাতীয় ডকার প্রক্রিয়া থেকে প্রস্থান করব? সিটিআরএল সি বা সিটিআরএল জেড টিপুন বা টাইপিং প্রস্থানটি কাজ করছে না বা ডকার স্টপ কমান্ড দ্বারা কি আমাকে এটি মেরে ফেলতে হবে?
নোড_ম্যান

docker-compose down [service-name]কাজ করে না নাকি? (এবং কোনও উদ্বেগের কথা আপনি স্বাগত জানালেন, সহায়তা করে খুশি :))
এস ..

2

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

প্রশ্নটি এখন ডকার অ্যালপাইন ধারকটিতে একটি শেল শুরু করা উল্লেখ করে যা ব্যবহার shবা ashবা /bin/shবা বোঝায় /bin/ash/

ওপির প্রশ্নের ভিত্তিতে:

docker run image sh -c "cd /path/to/somewhere && python a.py"


1

bash -cআপনি যে কমান্ডগুলি চালাচ্ছেন তা অপেক্ষাকৃত সহজ হলে ভাল কাজ করে। তবে, আপনি যদি নিয়ন্ত্রণ অক্ষর পূর্ণ কমান্ডগুলির একটি দীর্ঘ সিরিজ চালানোর চেষ্টা করছেন, এটি জটিল হয়ে উঠতে পারে।

আমি বাইরে থেকে প্রক্রিয়াটিতে আমার কমান্ডগুলি পাইপ করে সফলতার সাথে এটি পেয়েছিলাম, অর্থাৎ

cat script.sh | docker run -i <image> /bin/bash

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