ডকার পাত্রে থেকে হোস্ট কীভাবে নিয়ন্ত্রণ করবেন?
উদাহরণস্বরূপ, বাশ স্ক্রিপ্ট হোস্টে অনুলিপি কার্যকর কিভাবে করবেন?
ডকার পাত্রে থেকে হোস্ট কীভাবে নিয়ন্ত্রণ করবেন?
উদাহরণস্বরূপ, বাশ স্ক্রিপ্ট হোস্টে অনুলিপি কার্যকর কিভাবে করবেন?
উত্তর:
এই সত্যিই নির্ভর করে আপনার যে বাশ স্ক্রিপ্টটি করার দরকার তা তার উপর নির্ভর করে!
উদাহরণস্বরূপ, যদি ব্যাশ স্ক্রিপ্টটি কিছু আউটপুট প্রতিধ্বনি করে তবে আপনি কেবল এটি করতে পারেন
docker run --rm -v $(pwd)/mybashscript.sh:/mybashscript.sh ubuntu bash /mybashscript.sh
আরেকটি সম্ভাবনা হ'ল আপনি বাশ স্ক্রিপ্টটি কিছু সফ্টওয়্যার ইনস্টল করতে চান - স্ক্রিপ্টটি ডকার-কম্পোজ ইনস্টল করতে বলে। আপনি যেমন কিছু করতে পারে
docker run --rm -v /usr/bin:/usr/bin --privileged -v $(pwd)/mybashscript.sh:/mybashscript.sh ubuntu bash /mybashscript.sh
তবে এই মুহুর্তে আপনি ধারকটির ভিতরে থেকে আপনার হোস্টের জন্য প্রয়োজনীয় অনুমতিগুলি পেতে প্রয়োজনীয় স্ক্রিপ্টটি কী ঘনিষ্ঠভাবে তা জানতে পেরেছেন।
docker run --rm -v $(pwd)/mybashscript.sh:/work/mybashscript.sh ubuntu /work/mybashscript.sh
/usr/binপাত্রে প্রকাশ করে । উভয় ক্ষেত্রেই ধারকটির হোস্ট সিস্টেমে সম্পূর্ণ অ্যাক্সেস নেই। হতে পারে আমি ভুল, তবে এটি একটি খারাপ প্রশ্নের খারাপ উত্তর বলে মনে হচ্ছে।
আমি যে সমাধানটি ব্যবহার করি তা হ'ল হোস্টের সাথে সংযোগ স্থাপন করা SSHএবং কমান্ডটি এভাবে চালিত করা:
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
যেহেতু এই উত্তরটি ভোট পেতে চলেছে, আমি মনে করিয়ে দিতে চাই (এবং উচ্চ প্রস্তাব দিয়েছি), যে অ্যাকাউন্টটি স্ক্রিপ্টের জন্য অনুরোধ করা হচ্ছে তা কোনও অনুমতি ছাড়াই একটি অ্যাকাউন্ট হওয়া উচিত, তবে কেবল সেই স্ক্রিপ্টটি চালানো sudo(যা হতে পারে) sudoersফাইল থেকে সম্পন্ন )।
sshখুঁজে পাওয়া যায় না। তোমার অন্য কোনো পরামর্শ আছে?
apt update && apt install openssh-client।
একটি নামক পাইপ ব্যবহার। হোস্ট ওএস-এ, কমান্ডগুলি লুপ এবং পড়ার জন্য একটি স্ক্রিপ্ট তৈরি করুন এবং তারপরে আপনি এটিকে ওভাল বলবেন।
ডকারের ধারকটিকে সেই নামক পাইপটি পড়তে দিন।
পাইপ অ্যাক্সেস করতে সক্ষম হতে, আপনাকে এটি একটি ভলিউমের মাধ্যমে মাউন্ট করতে হবে।
এটি এসএসএইচ মেকানিজমের অনুরূপ (বা অনুরূপ সকেট ভিত্তিক পদ্ধতি), তবে আপনাকে হোস্ট ডিভাইসে সঠিকভাবে সীমাবদ্ধ করে, এটি সম্ভবত আরও ভাল। এছাড়াও আপনাকে প্রমাণীকরণের তথ্যটি অতিক্রম করতে হবে না।
আমার একমাত্র সতর্কতা হ'ল আপনি কেন এটি করছেন তা সম্পর্কে সতর্কতা অবলম্বন করা। এটি সম্পূর্ণরূপে কিছু করতে হবে যদি আপনি ব্যবহারকারী ইনপুট বা যা কিছু সহ স্ব-আপগ্রেড করার একটি পদ্ধতি তৈরি করতে চান তবে আপনি সম্ভবত কিছু কনফিগার ডেটা পেতে একটি কমান্ড কল করতে চান না, কারণ সঠিক উপায়টি এটি আর্গ হিসাবে প্রবেশ করানো হবে / ভলিউম ডকারে। আপনি যে বিবর্তন করছেন সে সম্পর্কেও সতর্ক থাকুন, তাই কেবল অনুমতি মডেলটিকে একটি চিন্তাভাবনা করুন।
অন্যান্য উত্তরগুলির মধ্যে যেমন স্ক্রিপ্ট চালানো under একটি ভলিউম সাধারণভাবে কাজ করবে না কারণ তারা সম্পূর্ণ সিস্টেমের সংস্থানগুলিতে অ্যাক্সেস পাবে না, তবে এটি আপনার ব্যবহারের উপর নির্ভর করে আরও উপযুক্ত হতে পারে।
আপনি যদি সুরক্ষা সম্পর্কে উদ্বিগ্ন না হন এবং আপনি কেবল ওপি এর মতো অন্য ডকারের ধারক থেকে হোস্টের উপর একটি ডকার পাত্রে শুরু করতে চাইছেন তবে আপনি হোস্টে চলমান ডকার সার্ভারটি শোনার সকেট ভাগ করেই হোস্টে চালাবেন।
দয়া করে https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface দেখুন এবং দেখুন আপনার ব্যক্তিগত ঝুঁকি সহনশীলতা এই নির্দিষ্ট অ্যাপ্লিকেশনের জন্য এটি অনুমোদন করে কিনা।
আপনি আপনার স্টার্ট কমান্ডটিতে নিম্নলিখিত ভলিউম আরোগুলি যুক্ত করে এটি করতে পারেন
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
বা /var/run/docker.sock আপনার ডকার কম্পোজ ফাইলের মধ্যে এইভাবে ভাগ করে:
version: '3'
services:
ci:
command: ...
image: ...
volumes
- /var/run/docker.sock:/var/run/docker.sock
আপনি যখন আপনার ডকারের ধারক মধ্যে ডকার শুরু কমান্ডটি চালাবেন, আপনার হোস্টে চলমান ডকার সার্ভারটি অনুরোধ এবং ভাইবোন ধারকটির বিধান দেখবে।
ক্রেডিট: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
/usr/bin/docker:/usr/bin/docker) এর জন্য একটি ভলিউমও মাউন্ট করতে হবে ।
এই উত্তরটি ব্র্যাডফোর্ড মেডিওরোসের সমাধানের আরও বিশদ সংস্করণ , যা আমার পক্ষেও সেরা উত্তর হিসাবে প্রমাণিত হয়েছিল, তাই কৃতিত্ব তাঁর কাছে।
তার উত্তরে তিনি কী করবেন তা ব্যাখ্যা করেছেন ( নামযুক্ত পাইপ ) তবে এটি ঠিক কীভাবে করবেন তা নয়।
আমাকে স্বীকার করতে হবে যে আমি তার সমাধানটি পড়ার সময় পাইপগুলির নাম কী ছিল তা জানি না। সুতরাং আমি এটি বাস্তবায়নের জন্য সংগ্রাম করেছি (যদিও এটি আসলেই সহজ), তবে আমি সফল হয়েছি, তাই আমি কীভাবে এটি করেছি তা ব্যাখ্যা করে সাহায্য করতে পেরে খুশি। সুতরাং আমার উত্তরের বিন্দুটি কেবল এটির কাজটি চালানোর জন্য আপনাকে যে আদেশগুলি চালানোর প্রয়োজন তা বিশদ করে দিচ্ছে, তবে আবারও কৃতিত্ব তার কাছে যায়।
প্রধান হোস্টে, ফোল্ডারটি বেছে নিন যেখানে আপনি আপনার নামক পাইপ ফাইল রাখতে চান, উদাহরণস্বরূপ /path/to/pipe/এবং একটি পাইপের নাম, উদাহরণস্বরূপ mypipe, এবং তারপরে চালান:
mkfifo /path/to/pipe/mypipe
পাইপ তৈরি হয়। প্রকার
ls -l /path/to/pipe/mypipe
এবং অ্যাক্সেসের অধিকারগুলি "পি" দিয়ে শুরু করে দেখুন, যেমন
prw-r--r-- 1 root root 0 mypipe
এখন চালান:
tail -f /path/to/pipe/mypipe
টার্মিনালটি এখন এই পাইপে ডেটা প্রেরণের জন্য অপেক্ষা করছে
এখন অন্য টার্মিনাল উইন্ডো খুলুন।
এবং তারপরে চালান:
echo "hello world" > /path/to/pipe/mypipe
প্রথম টার্মিনালটি পরীক্ষা করুন (যার সাথে tail -fএটি রয়েছে) এটি "হ্যালো ওয়ার্ল্ড" প্রদর্শিত হবে
হোস্ট কনটেইনারটিতে, চালনার পরিবর্তে tail -fযা ইনপুট হিসাবে যা কিছু প্রেরিত হয় তা কেবল আউটপুট করে দেয়, এই কমান্ডটি চালান যা এটি কমান্ড হিসাবে কার্যকর করবে:
eval "$(cat /path/to/pipe/mypipe)"
তারপরে, অন্য টার্মিনাল থেকে, চালানোর চেষ্টা করুন:
echo "ls -l" > /path/to/pipe/mypipe
প্রথম টার্মিনালে ফিরে যান এবং আপনার ls -lকমান্ডের ফলাফলটি দেখতে হবে ।
আপনি লক্ষ করেছেন যে পূর্ববর্তী অংশে, ls -lআউটপুট প্রদর্শিত হওয়ার ঠিক পরে , এটি কমান্ডগুলি শোনা বন্ধ করে দেয়।
পরিবর্তে eval "$(cat /path/to/pipe/mypipe)", চালান:
while true; do eval "$(cat /path/to/pipe/mypipe)"; done
(আপনি এটি কিছু করতে পারেন)
এখন আপনি একের পর এক সীমাহীন সংখ্যক কমান্ড প্রেরণ করতে পারেন, সেগুলি কেবল প্রথমটি নয়, কার্যকর করা হবে।
একমাত্র সতর্কতা হ'ল হোস্টটিকে পুনরায় বুট করতে হবে, "যখন" লুপটি কাজ করা বন্ধ করবে।
পুনরায় বুট পরিচালনা করতে, আমি এখানে যা করেছি:
হেডারের সাথে while true; do eval "$(cat /path/to/pipe/mypipe)"; doneডাকা একটি ফাইল রাখুনexecpipe.sh#!/bin/bash
chmod +xএটি ভুলবেন না
এটি চালিয়ে ক্রন্টব এ যুক্ত করুন
crontab -e
এবং তারপরে অ্যাড
@reboot /path/to/execpipe.sh
এই মুহুর্তে, এটি পরীক্ষা করুন: আপনার সার্ভারটি পুনরায় বুট করুন, এবং এটি ফিরে আসার পরে পাইপের মধ্যে কিছু কমান্ড প্রতিধ্বনি করুন এবং সেগুলি কার্যকর করা হয়েছে কিনা তা পরীক্ষা করুন। অবশ্যই, আপনি কমান্ডগুলির আউটপুট দেখতে সক্ষম নন, সুতরাং ls -lসাহায্য করবে না, তবে touch somefileসহায়তা করবে।
অন্য বিকল্পটি কোনও ফাইলে আউটপুট রাখার জন্য স্ক্রিপ্টটি পরিবর্তন করা যেমন:
while true; do eval "$(cat /path/to/pipe/mypipe)" &> /somepath/output.txt; done
এখন আপনি চালাতে পারেন ls -lএবং আউটপুট ( &>স্ট্যাডআউট এবং স্ট্যাডার উভয় ব্যাশ ব্যবহার করে ) আউটপুট.টিএসএক্সে থাকতে হবে।
আপনি যদি আমার মতো ডকার কম্পোজ এবং ডকফাইল উভয়ই ব্যবহার করেন তবে আমি যা করেছি তা এখানে:
আসুন ধরে নেওয়া যাক /hostpipeআপনি নিজের ধারক হিসাবে মাইপাইপের পিতা-মাতা ফোল্ডারটি মাউন্ট করতে চান
এটি যুক্ত করুন:
VOLUME /hostpipe
একটি মাউন্ট পয়েন্ট তৈরি করতে আপনার ডকফায়াইল এ
তারপরে এটি যুক্ত করুন:
volumes:
- /path/to/pipe:/hostpipe
হোস্টপাইপ হিসাবে / পাথ / টু / পাইপ হিসাবে মাউন্ট করার জন্য আপনার ডকার রচনা ফাইলটিতে
আপনার ডকারের পাত্রে পুনরায় চালু করুন।
আপনার ডকার পাত্রে কার্যকর করুন:
docker exec -it <container> bash
মাউন্ট ফোল্ডারে যান এবং আপনি পাইপটি দেখতে পারেন তা পরীক্ষা করুন:
cd /hostpipe && ls -l
এখন ধারক থেকে একটি কমান্ড চালানোর চেষ্টা করুন:
echo "touch this_file_was_created_on_main_host_from_a_container.txt" > /hostpipe/mypipe
এবং এটি কাজ করা উচিত!
সতর্কতা: আপনার যদি একটি ওএসএক্স (ম্যাক ওএস) হোস্ট এবং একটি লিনাক্স ধারক থাকে তবে এটি কাজ করবে না (এখানে ব্যাখ্যা https://stackoverflow.com/a/43474708/10018801 এবং এখানে https://github.com/docker ইস্যু করুন / ফর-ম্যাক / ইস্যু / 483 ) কারণ পাইপের প্রয়োগ একই রকম নয়, সুতরাং আপনি লিনাক্স থেকে পাইপে যা লিখবেন তা কেবল একটি লিনাক্স দ্বারা পড়তে পারে এবং ম্যাক ওএস থেকে পাইপটিতে আপনি যা লেখেন তা কেবল একটি দ্বারা পড়তে পারে ম্যাক ওএস (এই বাক্যটি খুব সঠিক নাও হতে পারে তবে কেবল একটি ক্রস-প্ল্যাটফর্মের সমস্যা উপস্থিত রয়েছে সে সম্পর্কে সচেতন থাকুন)।
উদাহরণস্বরূপ, আমি যখন আমার ম্যাক ওএস কম্পিউটার থেকে ডিইভিতে আমার ডকার সেটআপ চালাই, উপরে বর্ণিত নামযুক্ত পাইপটি কাজ করে না। তবে মঞ্চায়ন ও উত্পাদনে আমার কাছে লিনাক্স হোস্ট এবং লিনাক্স পাত্রে রয়েছে এবং এটি পুরোপুরি কার্যকর হয়।
এখানে আমি আমার নোড জেএস কনটেইনার থেকে মূল হোস্টে একটি আদেশ পাঠিয়ে আউটপুটটি পুনরুদ্ধার করব:
const pipePath = "/hostpipe/mypipe"
const outputPath = "/hostpipe/output.txt"
const commandToRun = "pwd && ls-l"
console.log("delete previous output")
if (fs.existsSync(outputPath)) fs.unlinkSync(outputPath)
console.log("writing to pipe...")
const wstream = fs.createWriteStream(pipePath)
wstream.write(commandToRun)
wstream.close()
console.log("waiting for output.txt...") //there are better ways to do that than setInterval
let timeout = 10000 //stop waiting after 10 seconds (something might be wrong)
const timeoutStart = Date.now()
const myLoop = setInterval(function () {
if (Date.now() - timeoutStart > timeout) {
clearInterval(myLoop);
console.log("timed out")
} else {
//if output.txt exists, read it
if (fs.existsSync(outputPath)) {
clearInterval(myLoop);
const data = fs.readFileSync(outputPath).toString()
if (fs.existsSync(outputPath)) fs.unlinkSync(outputPath) //delete the output file
console.log(data) //log the output of the command
}
}
}, 300);
কোনও পোর্টে শোনার জন্য একটি সাধারণ সার্ভার অজগর সার্ভার লিখুন (বলুন 8080), ধারকটির সাথে পোর্ট -p 8080: 8080 বেঁধে রাখুন, লোকালহোস্টের কাছে একটি HTTP অনুরোধ করুন: 8080 পোপেন সহ অজগর সার্ভারটি শেল স্ক্রিপ্ট চালাতে জিজ্ঞাসা করুন, কার্ল চালান বা এইচটিটিপি অনুরোধটি কার্ল -d করতে 'f "foo": "বার"}' লোকালহোস্ট: 8080
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
import subprocess
import json
PORT_NUMBER = 8080
# This class will handles any incoming request from
# the browser
class myHandler(BaseHTTPRequestHandler):
def do_POST(self):
content_len = int(self.headers.getheader('content-length'))
post_body = self.rfile.read(content_len)
self.send_response(200)
self.end_headers()
data = json.loads(post_body)
# Use the post data
cmd = "your shell cmd"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
p_status = p.wait()
(output, err) = p.communicate()
print "Command output : ", output
print "Command exit status/return code : ", p_status
self.wfile.write(cmd + "\n")
return
try:
# Create a web server and define the handler to manage the
# incoming request
server = HTTPServer(('', PORT_NUMBER), myHandler)
print 'Started httpserver on port ' , PORT_NUMBER
# Wait forever for incoming http requests
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()
আমার অলসতা আমাকে সবচেয়ে সহজ সমাধান খুঁজতে পরিচালিত করেছিল যা এখানে উত্তর হিসাবে প্রকাশিত হয়নি।
এটা তোলে উপর ভিত্তি করে তৈরি মহান নিবন্ধ দ্বারা Luc juggery ।
আপনার ডকারের ধারক থেকে আপনার লিনাক্স হোস্টের পুরো শেলটি অর্জন করার জন্য আপনাকে যা করতে হবে তা হ'ল:
docker run --privileged --pid=host -it alpine:3.8 \
nsenter -t 1 -m -u -n -i sh
ব্যাখ্যা:
--privileged: ধারকটিকে অতিরিক্ত অনুমতি দেয়, এটি ধারকটিকে হোস্টের ডিভাইসগুলিতে অ্যাক্সেস পেতে দেয় (/ dev)
--pid = হোস্ট: কনটেইনারগুলি ডকার হোস্টের প্রসেস ট্রি ব্যবহার করতে অনুমতি দেয় (যে ভিএমটিতে ডকার ডিমন চলছে) ন্যান্সটার ইউটিলিটি: বিদ্যমান নামস্থানগুলিতে একটি প্রক্রিয়া চালানোর অনুমতি দেয় (বিল্ডিং ব্লকগুলি যা পাত্রে বিচ্ছিন্নতা সরবরাহ করে)
এনসেন্টার (-t 1 -m -u -n -i sh) পিআইডি 1 সহ প্রসেসের মতো একই বিচ্ছিন্ন প্রেক্ষাপটে প্রসেসটি চালানোর অনুমতি দেয় পুরো কমান্ডটি তারপরে ভিএম-তে একটি ইন্টারেক্টিভ sh শেল সরবরাহ করবে
এই সেটআপটিতে প্রধান সুরক্ষা জড়িত রয়েছে এবং সতর্কতার সাথে ব্যবহার করা উচিত (যদি থাকে)।
docker run --detach-keys="ctrl-p" -it -v /:/mnt/rootdir --name testing busybox
# chroot /mnt/rootdir
#
আমি একটি সহজ পদ্ধিতি আছে।
পদক্ষেপ 1: মাউন্ট /var/run/docker.sock:/var/run/docker.sock (সুতরাং আপনি আপনার ধারক মধ্যে ডকার কমান্ড কার্যকর করতে সক্ষম হবে)
পদক্ষেপ 2: আপনার ধারকটির নীচে এটি চালিত করুন। এখানে মূল অংশটি হ'ল (- নেটওয়ার্ক হোস্ট এটি হোস্ট প্রসঙ্গ থেকে কার্যকর হবে)
ডকার রান - আই --আরএম - নেট ওয়ার্ক -v /opt/test.sh:/test.sh আলপাইন: ৩.7 শট / টেস্ট.শ
test.sh- এ আপনার যা কিছু কমান্ড থাকতে হবে (ifconfig, netstat ইত্যাদি ...)। এখন আপনি হোস্ট কনটেক্সট আউটপুট পেতে সক্ষম হবেন।
মার্কাস মনে করিয়ে দেয় যে, ডকার মূলত বিচ্ছিন্নতা প্রক্রিয়াজাতকরণ। ডকার ১.৮ দিয়ে শুরু করে আপনি হোস্ট এবং ধারক উভয়ের মধ্যেই ফাইলগুলি অনুলিপি করতে পারেন, ডকটি দেখুনdocker cp
https://docs.docker.com/references/commandline/cp/
কোনও ফাইল অনুলিপি করা হয়ে গেলে আপনি এটি স্থানীয়ভাবে চালাতে পারেন
myvalue=$(docker run -it ubuntu echo $PATH)এটির মতো একটি স্ক্রিপ্ট শেলের মধ্যে এটির মতো নিয়মিত কিছু পরীক্ষা করুন (অবশ্যই, আপনি $ PATH ব্যতীত অন্য কিছু ব্যবহার করবেন, এটি কেবল একটি উদাহরণ মাত্র), যখন এটি কিছু নির্দিষ্ট মান, আপনি আপনার স্ক্রিপ্টটি চালু করুন
আপনি পাইপ ধারণাটি ব্যবহার করতে পারেন, তবে হোকার মেশিনে একটি ডক পাত্রে থেকে কোনও স্ক্রিপ্ট কার্যকর করতে লক্ষ্য অর্জনের জন্য হোস্ট এবং fswatch এ একটি ফাইল ব্যবহার করুন । পছন্দ করুন (নিজের ঝুঁকিতে ব্যবহার করুন):
#! /bin/bash
touch .command_pipe
chmod +x .command_pipe
# Use fswatch to execute a command on the host machine and log result
fswatch -o --event Updated .command_pipe | \
xargs -n1 -I "{}" .command_pipe >> .command_pipe_log &
docker run -it --rm \
--name alpine \
-w /home/test \
-v $PWD/.command_pipe:/dev/command_pipe \
alpine:3.7 sh
rm -rf .command_pipe
kill %1
এই উদাহরণে, ধারকটির অভ্যন্তরে / dev / কমান্ড_পাইপে আদেশগুলি প্রেরণ করুন:
/home/test # echo 'docker network create test2.network.com' > /dev/command_pipe
হোস্টে, আপনি নেটওয়ার্কটি তৈরি করা হয়েছে কিনা তা পরীক্ষা করতে পারেন:
$ docker network ls | grep test2
8e029ec83afe test2.network.com bridge local
ব্যবহারকারী 2915097 এর প্রতিক্রিয়া প্রসারিত করতে :
বিচ্ছিন্নতার ধারণাটি কোনও অ্যাপ্লিকেশন / প্রক্রিয়া / ধারক (এটি আপনার কোণ যাই হোক না কেন) হোস্ট সিস্টেমটিতে খুব স্পষ্টভাবে কী করতে পারে তা সীমাবদ্ধ করতে সক্ষম হয়। সুতরাং, একটি ফাইল অনুলিপি এবং সম্পাদন করতে সক্ষম হওয়ায় সত্যিই পুরো ধারণাটি নষ্ট হয়ে যায়।
হ্যাঁ. তবে এটি কখনও কখনও প্রয়োজনীয় হয়।
না। এটি কেস নয়, বা ডকার ব্যবহার করা সঠিক জিনিস নয়। আপনার যা করা উচিত তা হল আপনি যা করতে চান তার একটি স্পষ্ট ইন্টারফেস ঘোষণা করা (উদাহরণস্বরূপ একটি হোস্ট কনফিগারেশন আপডেট করা), এবং ঠিক তেমন কিছুই করার জন্য ন্যূনতম ক্লায়েন্ট / সার্ভার লিখুন । সাধারণত, তবে এটি খুব পছন্দসই বলে মনে হয় না। অনেক ক্ষেত্রে, আপনার কেবল নিজের পদ্ধতির পুনর্বিবেচনা করা উচিত এবং সেই প্রয়োজনটি মুছে ফেলা উচিত। মূলত সমস্ত কিছু এমন একটি পরিষেবা ছিল যা কিছু প্রোটোকল ব্যবহার করে পৌঁছতে পারে D হোস্টের উপর স্বেচ্ছাচারিতা জিনিস চালানোর অধিকার পাওয়ার জন্য ডকারের ধারকটির কোনও সঠিক ব্যবহারের কথা আমি ভাবতে পারি না।
A( গিথাবের এসআরসি )। ইন Aরেপো আমি সঠিক আঙ্গুলসমূহ যা 'Git টান' কম্যান্ড পর নতুন Docker ইমেজ তৈরি করে এবং এগুলো চালানোর (এবং অবশ্যই পুরাতন ধারক সরাতে) তৈরি করুন। পরবর্তী: গিথুবের ওয়েব-হুক রয়েছে যা মাস্টারকে ধাক্কা দেওয়ার পরে স্বেচ্ছাসেবী সমাপ্তির লিঙ্কে পোষ্ট অনুরোধ তৈরি করতে দেয়। সুতরাং আমি ডকেরাইজড পরিষেবা বি তৈরি করতে চাই না যা সেই শেষ পয়েন্ট হবে এবং এটি কেবলমাত্র HOST মেশিনে রেপো এ 'গিট পুল' চালাবে (গুরুত্বপূর্ণ: কমান্ড 'গিট টান' অবশ্যই হোস্ট পরিবেশে কার্যকর করা উচিত - বি পরিবেশে নয় কারণ বি বি এর ভিতরে নতুন ধারক চালাতে পারে না ...)