ডকার কনটেইনার রান কমান্ডটি কীভাবে প্রদর্শিত হবে


114

আমি ডকারের ধারক সেটআপ করতে একটি তৃতীয় পক্ষের জিইউআই (সিনোলজি ডকার প্যাকেজ) ব্যবহার করি। যাইহোক, এটির সীমাবদ্ধতা আমাকে কমান্ড লাইন থেকে ধারক চালানোর প্রয়োজন করে তোলে। (আমি বন্দরের সাথে আবদ্ধ হওয়ার জন্য অন্য হোস্ট আইপি ম্যাপ করতে চাই)

এখন থেকে যেহেতু অনেকগুলি সেটিংস ইতিমধ্যে সম্পন্ন হয়েছে, তাই আমি এই চালকটি শুরু করে এমন মূল রান কমান্ডটি পুনরুদ্ধার করতে চাই, তারপরে আমি পোর্ট ম্যাপিং পোর্টটিকে নতুনতে পরিবর্তন করতে পারি। যেমন " docker run -p 80:8080 gitlab"

আমি এটি করার উপায় খুঁজে পাচ্ছি না, ইভেন্ট "ডকার ইন্সপেক্ট" ব্যবহার করুন, এরকম কোনও তথ্য সরবরাহ করা হয়নি।

এই সমস্যাটি সমাধান করার জন্য দয়া করে কিছু পরামর্শ দিন।



7
@ ক্যাপিটালিস্টপ্যাগ এই প্রশ্নটির ঠিক বিপরীত - এটি কনটেইনারটির ভিতরে থাকা কমান্ড সম্পর্কে, এটি ধারকটি প্রবর্তন করতে ব্যবহৃত এক সম্পর্কে ।
নীলস কেওরেন্টজেস

ইতিহাস | গ্রেপ 'ডকার রান'
অ্যাড্রিয়ান মে

4
এটি আশ্চর্যজনক যে ডকারের এগুলির জন্য অন্তর্নির্মিত বিকল্প নেই।
ম্যাকিন্ডোস

উত্তর:


143

তাহলে ইঞ্জিনিয়ারিং ডকার রান কমান্ডকে রিভার্স করবেন কীভাবে?

এখানে একটি গিথুব সংগ্রহস্থল রয়েছে যা ইঞ্জিনিয়ারিং ডকার রান কমান্ডটি বিপরীত করার চেষ্টা করে, তবে এটি বর্তমানে নিখুঁত নয়, সংস্করণটি 0.1.2। আপডেট করার জন্য আপনার এটি অনুসরণ করা উচিত। হতে পারে একদিন আপনি এটির সাথে সঠিক রান কমান্ড পেতে এটি ব্যবহার করতে পারেন।

$ sudo pip install runlike

# run the ubuntu image
$ docker run -ti ubuntu bash

$ docker ps -a  
# suppose you get the container ID 1dfff2ba0226

# Run runlike to get the docker run command. 
$ runlike 1dfff2ba0226
docker run --name=elated_cray -t ubuntu bash

গিথুব সংগ্রহশালা: রানওল লাইক

আপডেট :

ইনস্টল না করে চালান (ধন্যবাদ @ টিটিও)

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    assaflavie/runlike YOUR-CONTAINER

বা উপকরণ সেট করুন

alias runlike="docker run --rm -v/var/run/docker.sock:/var/run/docker.sock 
 assaflavie/runlike"

runlike YOUR-CONTAINER

4
সিএনোলজি ডিএসএম-তে রানকলি সেটআপ করা একটু কঠিন, তবে আমি এটি চেষ্টা করব। ধন্যবাদ!
জ্যাক ইউ

4
আমাকে সুডো পাইপ ইনস্টল রানলিই ব্যবহার করতে হয়েছিল
সাইমন

@ জ্যাক ইয়ু আপনি সিসনোলজিতে এটি ইনস্টল করতে অর্জন করেছেন?
xedo

রান-লেইক আমাদের অনেক সময় বাঁচায় => ❤️
mtt2p

21
এর মতো চালান:docker run -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
টিলো

36

ডকার পরিদর্শন ব্যবহার করুন :

$ docker inspect foo/bar
[
    {
        # …
        "Config": {
            # …
            "Cmd": [
                "/usr/local/bin/script.sh"
            ],
            # …
        }
    }
]

আপনি JQ দিয়ে প্রোগ্রামাগুলিভাবে এটিকে পার্স করতে পারেন :

$ docker inspect foo/bar | jq -r '.[0]["Config"]["Cmd"][0]'
/usr/local/bin/script.sh

4
হ্যাঁ আমি jq খুব পছন্দ করেন, কমান্ড উপর সামান্য খামচি (ক সহজ টাইপ করুন এবং এই প্রোগ্রামটিতে পড়তে বিট) হল: docker inspect <CONTAINER> | jq ".[0].Config.Cmd"
পল ক্যারল

4
"Cmd": null,সম্ভবত এটি কেবল তখনই কাজ করে যদি কনটেইনারটি স্বয়ংক্রিয়ভাবে ডকার ডেমন না শুরু হয়?
মাইকেল

28

docker runবিদ্যমান পাত্রে থেকে কমান্ড তৈরি করতে আমি একটি সাধারণ নোড-ভিত্তিক সি এল এল সরঞ্জাম লিখেছি ।

https://www.npmjs.com/package/rekcod

এখানে একটি উদাহরণ:

$ npm i -g rekcod
$ rekcod redis_container

docker run -d --name redis_container --restart always -h a44159e148e1 \
--expose 6379/tcp -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
-e REDIS_VERSION=3.0.7 -e REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz \
-e REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c \
--entrypoint "/entrypoint.sh" redis "redis-server"

এছাড়াও লিঙ্কগুলি এবং মাউন্ট করা ভলিউম এবং অন্যান্য স্টাফগুলি পরিচালনা করে।

এই মুহুর্তে খুব দৃust় নয়, তবে উল্লিখিত অন্যান্য কয়েকটি জিনিসের চেয়ে বেশি পরিচালনা করে এবং আমি যা খুঁজছিলাম তা এটিই ছিল বেশি।

সম্পাদনা: কোনও সফ্টওয়্যার ইনস্টল না করেই একক কমান্ডে:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod redis_container

7

একটি সহজ (?) বিকল্প হ'ল এই ডকার পরিদর্শন টেম্পলেটটি চালানো , যা বিল্টিন গো টেম্প্লেটিং ক্ষমতাগুলি একটি docker runসামঞ্জস্যপূর্ণ কমান্ড আউটপুট করতে ব্যবহার করে । টেমপ্লেটটি কেবলমাত্র সর্বাধিক সাধারণ কমান্ড-লাইন বিকল্পগুলিকে আচ্ছাদন করে তবে এটি সহজেই প্রসারিত হতে পারে।

এই সমাধানটির ডক নিজেই বাদে অন্য সরঞ্জামগুলিতে কোনও নির্ভরতা নেই।


5

সমস্ত পাত্রে ডকার পরিদর্শন -f "{{.Name}} {{.পথ}} {{। আর্গ


4
এটি কন্টেইনারটির ভিতরে কী চলছে সে সম্পর্কে কমান্ড এবং যুক্তিগুলি তালিকাভুক্ত করে , কীভাবে কন্টেইনারটি শুরু করা হয়নি (যেমন আপনি রানালাইক উত্তর পোস্ট করেছেন এমন প্রশ্নের উত্তর দিন এর 4 মিনিট পরে! :))।
ওজগুর

4

বর্তমানে মনে হচ্ছে আমাদের 'ডকার ইন্সপেক্ট' করতে হবে এবং তারপরে ম্যানুয়ালি রান কমান্ডটি পুনরায় তৈরি করতে হবে।

আমি এটির জন্য কাউকে বাশ স্ক্রিপ্ট লেখার চেষ্টা করতে দেখেছি: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89

তবে এটি অসম্পূর্ণ এবং জিকিউয়ের উপর নির্ভর করে।


4

আপনি যদি আপনার বর্তমান চলমান ডকার সার্ভার সেটআপে কোনও কিছু ইনস্টল করতে না চান তবে আপনি কেবল কার্যকর করতে পারেন ( $CONTAINER_NAMEচালকের যুক্তি রাখতে চান এমন ধারকের নামটি প্রতিস্থাপন করুন ):

docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache nodejs nodejs-npm && npm i -g rekcod && rekcod $CONTAINER_NAME"

( rekcodপদ্ধতির জন্য )

বা

docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache py-pip && pip install runlike && runlike $CONTAINER_NAME"

( runlike পদ্ধতির জন্য )


আমি মনে করি -itএবং এর মধ্যে একটি জায়গা থাকা উচিত--rm
IpsRich

@ ইপসরিচ আপনি সঠিক, আমি আমার উত্তর পরিবর্তন করেছি ধন্যবাদ!
অ্যান্থনি ও।

3

"ডকার রান" দিয়ে শুরু হওয়া কমান্ডগুলি ক্যাপচারের জন্য বাশ-প্রিক্সেকের মতো কিছু ব্যবহার করা সহজ ( দৃust় ) বিকল্প হতে পারে । এরপরে আপনি এই আদেশগুলি কোথাও সঞ্চয় করতে পারেন এবং সেগুলি পরে পুনরুদ্ধার করতে পারেন।

উদাহরণস্বরূপ, আপনি আপনার ব্যাশ প্রোফাইলে এরকম কিছু যুক্ত করতে পারেন:

[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh
docker_run_history=~/.docker_run_history
docker_clear_history(){
    echo -n > $docker_run_history
}
docker_search_history(){
    search_for="$@"
    [[ -z $search_for ]] && search_for=".*"
    \cat $docker_run_history | grep "$search_for" | tail -1
}
docker_ps_mod(){
    for c in $(docker ps --format "{{.Image}}"); do 
        echo "Container $c was run using:"
        echo -e "\t$(docker_search_history $c)"
    done
}
docker_hook(){
    if [[ $@ =~ ^"docker run".*$ ]]; then
        \echo "$@" >> $docker_run_history 
    fi
}
preexec(){ 
    docker_hook $@
}

তারপরে আপনি নিজের জিনিস চালাতে পারতেন:

source ~/.bash_profile
docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
docker run -d daemon
docker_ps_mod

কোন ফলাফল:

Container image was run using:
    docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
Container daemon was run using:
    docker run -d daemon

আকর্ষণীয় বিকল্প। +1
ভনসি

এটা অবাস্তব যে ডকার আদেশের ইতিহাস রেকর্ড করে না এবং এর মতো সরল পাইপিং থাকে।
ম্যাকিন্ডো

2

সেই ডকার রান কমান্ড ডকফাইফিল বা অন্য কোনও ডকার-সম্পর্কিত নথিগুলিতে নির্দিষ্ট করা হয়নি।

হয় আপনি আপনার ধারকটির সাথে সম্পর্কিত ডকুমেন্টেশনে একটি উদাহরণ খুঁজে পান, বা আপনি যে ডকারকে (কমপক্ষে কমান্ড এবং পোর্ট ম্যাপিংয়ের জন্য) একটি দিয়ে চালাচ্ছেন তা আবিষ্কার করতে পারেন docker ps -a(তবে এটি আপনাকে সম্ভাব্য --volumes-fromবিকল্পগুলি দেয় না)

পরীক্ষা করে দেখুন /usr/syno/etc/packages/Docker-GitLab/config

এটি গিটল্যাব কনফিগারেশনের থেকে পৃথক , যা সিনোলজিতে রয়েছে/usr/syno/etc/packages/Docker/synology_gitlab.config


সিনোলজি ডকারের কনফিগার ফাইলের অবস্থান উল্লেখ করার জন্য ধন্যবাদ Thanks তবে কনফিগারেশন আরও বেশি সাহায্য করতে পারে না। আপনি ওয়েব ইউআই থেকে কোনও ধারক রফতানি করার মতো বিষয়বস্তুও অনেকটা একই।
জ্যাক ইউ


0

সমস্ত ডকার ফাইল এখানে আপনি সিএমডি খুঁজে পেতে পারেন এবং মাউন্টগুলি উদাহরণস্বরূপ ls -la /proc/1 কেবল এটি বিড়াল করুন

cat /proc/1/cmdline
nginx: master process nginx -g daemon off;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.