docker - আমি একটি বিদ্যমান ডকার কনটেইনারে একটি পোর্ট ম্যাপিং কিভাবে বরাদ্দ করব?




port lxc (8)

"বিদ্যমান" দ্বারা যদি আপনি "চলমান" মানে, তবে এটি একটি পোর্ট ম্যাপিং যোগ করার জন্য (বর্তমানে) সম্ভব নয়।

তবে, আপনি গতিশীলভাবে একটি Pipework নতুন নেটওয়ার্ক ইন্টারফেস যুক্ত করতে পারেন, যদি আপনি কোনও চলমান কন্টেইনারে এটি বন্ধ / পুনঃসূচনা না করে একটি পরিষেবা প্রকাশ করতে চান।

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


আপনি hostconfig.json ফাইলটি সরাসরি /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json এ সম্পাদনা করে পোর্ট ম্যাপিং পরিবর্তন করতে পারেন।

আপনি docker docker inspect <container_name> কমান্ডের মাধ্যমে [hash_of_the_container] নির্ধারণ করতে পারেন এবং "আইডি" ক্ষেত্রের মান হ্যাশ।

1) stop the container 
2) stop docker service (per Tacsiazuma's comment)
3) change the file
4) restart your docker engine (to flush/clear config caches)
5) start the container

সুতরাং আপনি এই পদ্ধতির সঙ্গে একটি ইমেজ তৈরি করতে হবে না। আপনি এখানে পুনরায় আরম্ভ পতাকা পরিবর্তন করতে পারেন।

PS আপনার হোস্ট মেশিন অনুসারে আপনার ডকার ইঞ্জিনটি সঠিকভাবে কীভাবে পুনরায় শুরু করবেন তা শিখতে https://docs.docker.com/engine/admin/ যান। উবুন্টু 16.04 এ চলমান আমার ডকার ইঞ্জিনটি পুনরায় চালু করতে আমি sudo systemctl restart docker ব্যবহার করেছি।


আপনি কেবল চলমান কন্টেইনারের পোর্ট পরিবর্তন করতে চান, তাহলে আপনি করবেন:

  1. বিদ্যমান ধারক বন্ধ করুন

    সুডো ডকার বন্ধ করুন NAME

  2. এখন নতুন পোর্ট ম্যাপিং দিয়ে পুনরায় শুরু করুন

    সুডো ডকার রান-ডি-পি 81:80 নাম্বার

যেখানে:

"-ড" ব্যাকগ্রাউন্ড / ডামনার ডায়মন

"-পি" পোর্ট ম্যাপিং সক্ষম করুন

আপনার ব্রাউজারের সাথে অ্যাক্সেস করার জন্য "81" বাহ্যিক (উন্মুক্ত) পোর্ট ব্যবহার করুন

"80" অভ্যন্তরীণ docker ধারক শুনতে পোর্ট


আপনি যদি docker run <NAME> এটি একটি নতুন চিত্রটি docker run <NAME> উঠবে, যা সম্ভবত আপনি যা চান তা নয়।

যদি আপনি একটি বর্তমান ইমেজ পরিবর্তন করতে চান নিম্নলিখিত কাজ করে:

docker ps -a

আপনার লক্ষ্য ধারক এর আইডি নিন এবং যান:

cd /var/lib/docker/containers/<conainerID><and then some:)>

ধারক বন্ধ করুন:

docker stop <NAME>

ফাইল পরিবর্তন করুন

vi config.v2.json

"Config": {
    ....
    "ExposedPorts": {
        "80/tcp": {},
        "8888/tcp": {}
    },
    ....
},
"NetworkSettings": {
....
"Ports": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],

এবং ফাইল পরিবর্তন করুন

vi hostconfig.json

"PortBindings": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],
     "8888/tcp": [
         {
             "HostIp": "",
             "HostPort": "8888"
         } 
     ]
 }

আপনার ডকার পুনরায় আরম্ভ করুন এবং এটি কাজ করা উচিত।


আমরা এই সহজে সম্পন্ন করার জন্য ssh মত একটি ব্যবহার সহজ সরঞ্জাম।

আমি উবুন্টু হোস্ট এবং উবুন্টু ভিত্তিক ডকার ইমেজ ব্যবহার করছিলাম।

  1. ডকারের ভিতরে openssh-client ইনস্টল আছে।
  2. বাইরে ডকার (হোস্ট) opens opens সার্ভার সার্ভার আছে।

যখন একটি নতুন পোর্ট ম্যাপ করা প্রয়োজন হয়,

docker ভিতরে নিম্নলিখিত কমান্ড চালান

ssh -R8888:localhost:8888 <username>@172.17.0.1

172.17.0.1 ডকার ইন্টারফেসের আইপি ছিল (আপনি ifconfig docker0 | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" " হোস্টে চালানোর মাধ্যমে এটি পেতে পারেন)।

এখানে আমার স্থানীয় 8888 পোর্টে 8888 পোর্টে ফিরে আসা হয়েছে। আপনি প্রয়োজনীয় পোর্ট পরিবর্তন করতে পারেন।

যদি আপনার আরও একটি পোর্ট দরকার, তবে আপনি ssh কে হত্যা করতে পারেন এবং নতুন পোর্টের সাথে এটির আরও একটি লাইন যুক্ত করতে পারেন।

আমি Netcat সঙ্গে এই পরীক্ষা করেছেন।


আমি এই সমস্যা আগ্রহী।

@Thasmo উল্লেখ করেছেন, পোর্ট ফরওয়ার্ডিং শুধুমাত্র docker run কমান্ড দিয়ে উল্লেখ করা যেতে পারে।
অন্যান্য কমান্ড, docker start -p বিকল্প নেই এবং docker port শুধুমাত্র বর্তমান ফরওয়ার্ডিং প্রদর্শন করে।

পোর্ট ফরওয়ার্ডিং যোগ করার জন্য, আমি সর্বদা এই পদক্ষেপগুলি অনুসরণ করি,

  1. চলমান ধারক stop

    docker stop test01
    
  2. ধারক কমিটি

    docker commit test01 test02
    

    দ্রষ্টব্য: উপরে, test02 একটি নতুন চিত্র যা আমি test01 ধারক থেকে তৈরি করছি।

  3. commited ইমেজ থেকে পুনরায় run

    docker run -p 8080:8080 -td test02
    

যেখানে প্রথম 8080 স্থানীয় বন্দর এবং দ্বিতীয় 8080 কন্টেইনার পোর্ট।


এর response পরিপূরক হিসাবে

আপনি আপনার কন্টেইনার তৈরির সময় পোর্টগুলি এলোমেলোভাবে মানচিত্রের জন্য $ docker run -P CONTAINER কন্টেইনার ব্যবহার করতে পারেন, কিন্তু নিরাপত্তা যাচাই করে সতর্ক থাকুন!

-P eq থেকে - --publish-all : "এটি সমস্ত উন্মুক্ত পোর্টগুলি র্যান্ডম পোর্টগুলিতে প্রকাশ করে",

তারপরে নীচের চিত্রটিতে দেখানো docker inspect CONTAINER পোর্ট ম্যাপিংয়ের জন্য docker inspect CONTAINER :

docker run -P সম্পর্কে docker run -P সম্পর্কে আরো পড়ুন


ফুজিমোটো test01 উদাহরণ test01 একটি ধারক, যেখানে test02 একটি চিত্র।

docker run আগে আপনি মূল docker run সরাতে পারেন এবং তারপরে আবার একই নামের ধারক বরাদ্দ করতে পারেন:

$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01

(হস্তান্তর করার পরিবর্তে পোর্টগুলি র্যান্ডম পোর্টে প্রকাশ করার জন্য -P ব্যবহার করে)।






linux-containers