লাইভ ডকার পাত্রে কোনও পোর্ট উন্মুক্ত করে


408

আমি একটি ডকার পাত্রে তৈরি করার চেষ্টা করছি যা একটি সম্পূর্ণ অন ভার্চুয়াল মেশিনের মতো কাজ করে। আমি জানি যে আমি একটি ডকর্মিলের অভ্যন্তরে এক্সপোজ নির্দেশ ব্যবহার করতে পারি একটি বন্দর প্রকাশ করতে এবং আমি পোর্টগুলি বরাদ্দ করতে -pপতাকাটি ব্যবহার করতে পারি docker run, তবে একবার একটি ধারক আসলে চলার পরে কি অতিরিক্ত পোর্টগুলি লাইভ / ম্যাপ করার জন্য কোনও আদেশ আছে?

উদাহরণস্বরূপ, ধরা যাক আমার কাছে একটি ডকার পাত্রে রয়েছে যা এসএসডি চলছে। অন্য কেউ কনটেইনার ssh এর ব্যবহার করে এবং httpd ইনস্টল করে। পাত্রে 80 পোর্টটি উন্মোচন করার এবং হোস্টের 8080 পোর্টে ম্যাপ করার কোনও উপায় আছে, যাতে লোকে পুনরায় আরম্ভ না করেই পাত্রে চলমান ওয়েব সার্ভারটি দেখতে পারে?


1
আপনি ধারকটিকে একটি রাউটেবল আইপি দিতে পারেন , তাই কোনও পোর্ট ম্যাপিং প্রয়োজন হয় না।
ম্যাট

উত্তর:


331

আপনি ডকারের মাধ্যমে এটি করতে পারবেন না তবে আপনি হোস্ট মেশিন থেকে ধারকটির অন-উন্মুক্ত পোর্টটি অ্যাক্সেস করতে পারবেন।

আপনার যদি এমন একটি ধারক থাকে যা 8000 বন্দরে কিছু চলমান থাকে তবে আপনি চালাতে পারেন

wget http://container_ip:8000

ধারকটির আইপি ঠিকানা পেতে, দুটি কমান্ড চালান:

docker ps

docker inspect container_name | grep IPAddress

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

আপনার লোকালহোস্ট বন্দরে 8001 এ ধারকটির বন্দরের 8000 প্রকাশ করতে:

 iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

আপনি যে কাজটি করতে পারেন তার একটি উপায় হ'ল আপনি যে পোর্ট ম্যাপিং চান তার সাথে অন্য একটি ধারক সেটআপ করা এবং iptables-save কমান্ডের আউটপুট তুলনা করা (যদিও, আমাকে অন্যান্য কয়েকটি অপশন সরিয়ে ফেলতে হয়েছিল যা ট্রাফিককে ডকারের মাধ্যমে যেতে বাধ্য করে প্রক্সি)।

দ্রষ্টব্য: এটি ডকারকে বিভ্রান্ত করছে, তাই সচেতনতার সাথে এটি করা উচিত যাতে এটি নীল ধোঁয়াকে ভালভাবে তৈরি করতে পারে

অথবা

অন্য বিকল্পটি হ'ল (নতুন? পোস্ট 0.6.6?) -পি বিকল্পটি দেখুন - যা এলোমেলো হোস্ট পোর্টগুলি ব্যবহার করবে এবং তারপরে তারগুলি যুক্ত করবে।

অথবা

০..6.৫ সহ, আপনি একটি নতুন ধারক আনতে লিংক বৈশিষ্ট্যটি ব্যবহার করতে পারেন যা বিদ্যমান ধারকটির সাথে কথা বলে, সেই ধারকটির -p পতাকাগুলিতে কিছু অতিরিক্ত রিলে করে? (আমি এখনও লিঙ্কগুলি ব্যবহার করি নি)

অথবা

0.11 ডকার সহ? আপনি docker run --net host ..আপনার ধারকটিকে সরাসরি হোস্টের নেটওয়ার্ক ইন্টারফেসের সাথে সংযুক্ত করতে ব্যবহার করতে পারেন (যেমন নেট নামটির ব্যবধানযুক্ত নয়) এবং এইভাবে আপনি পাত্রে খোলা সমস্ত পোর্ট উন্মুক্ত হয়।


6
এটি কমপক্ষে 1.3.0 ডকারের সাথে কাজ করে না বলে মনে হয়। ডকার ডিএনএটি নিয়ম -২ দিয়ে ডকার চালানোর সময় তৈরি করা হয় তবে এটি ম্যানুয়ালি যুক্ত করা সংযোগের অনুমতি দেয় বলে মনে হয় না। কন্টেইনার চলমান অবস্থায় অদ্ভুতভাবে নিয়মটি মুছে ফেলা মনে হয় না যে এটি কাজ করা থেকে বিরত থাকবে ...
সিলেসডাভিস

4
ধন্যবাদ। আমি সুরক্ষার অনুভূতিতে আবদ্ধ হয়েছিলাম যে অনাবৃত পোর্টগুলি নিরাপদ ছিল।
seanmcl

জিনিসগুলিকে স্বয়ংক্রিয় করা এবং জেকিউ + সিড ব্যবহার করা কার্যকর হতে পারে: CONTAINER_IP=$(docker inspect container_name | jq .[0].NetworkSettings.IPAddress | sed -r 's/\"([^\"]+)\"/\1/''])'); iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination ${CONTAINER_IP}:8000
এরিকসন.সেপদা

5
@ invoing পরিবর্তে ericson.cepeda jqএবং sedআপনি ব্যবহার করতে পারেন -fবিকল্প docker inspect:CONTAINER_IP=$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' container_name)
pwes

যারা kmkeen.com/jshon পছন্দ করেন তাদের জন্যjshon -e 0 -e NetworkSettings -e Networks -e bridge -e IPAddress -u
slf

138

আমি এখানে কি করব:

  • লাইভ ধারক প্রতিশ্রুতিবদ্ধ।
  • নতুন চিত্র সহ পোর্ট খোলা দিয়ে আবার ধারক চালান (আমি একটি ভাগ করা ভলিউম মাউন্ট করার পাশাপাশি এসএস পোর্টটিও খোলার পরামর্শ দিই)
sudo docker ps 
sudo docker commit <containerid> <foo/live>
sudo docker run -i -p 22 -p 8000:80 -m /data:/data -t <foo/live> /bin/bash

31
আমার প্রশ্নের মূল অংশটি হ'ল কনটেইনারটি পুনরায় চালু না করেই এটি হওয়া দরকার ... নতুন ধারকটিতে স্থানান্তর করা ফাইলগুলিকে রাখতে পারে তবে কার্যকরভাবে চলমান কোনও প্রক্রিয়া মেরে ফেলবে এবং কোনও শারীরিক মেশিনে রিবুটের অনুরূপ হবে। আমার এটি হওয়া দরকার। ধন্যবাদ যদিও!
2:38

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

হ্যাঁ, সমান্তরাল দৃষ্টান্তগুলি এবং বিপরীত প্রক্সিং আমি ডকারকে ভালোবাসি এমন কয়েকটি শীর্ষ কারণ। যাইহোক, এই দৃশ্যে আমার কনটেইনারটিতে চলমান সমস্ত প্রক্রিয়া সংরক্ষণ করা দরকার যা এসএসএইচ দিয়ে শুরু করা হতে পারে। এক্সিকিউটেবলগুলি চিত্রটি প্রতিশ্রুতিবদ্ধকরণ এবং একটি সমান্তরাল উদাহরণ শুরু করার সময় সংরক্ষণ করা হবে, এক্সিকিউটেবলগুলি তাদের আরম্ভ করা হবে না এবং র‌্যামের কিছু হারিয়ে যাবে।
23:20

6
তুমি কেন চালাও sudo dockerশুধু docker?
থিয়াগো ফিগেইয়েরো 9:56

এই টিপটি আমাকে অনেক সহায়তা করেছিল কারণ আমি ধীর নেটওয়ার্কে প্রচুর প্যাকেজ ইনস্টল করেছি। চালিয়ে গিয়ে docker commitআমি সবকিছু পুনরায় ইনস্টল করতে কয়েক ঘন্টা ব্যয় না করে আবার অ্যাপ্লিকেশনটি পরীক্ষা করতে প্রস্তুত ছিলাম।
গুস্তাভোহেঙ্কে

49

আপনি যদি বিদ্যমান কন্টেইনারটির একটি নতুন বন্দর প্রকাশ করতে না পারেন তবে আপনি একই ডকার নেটওয়ার্কে একটি নতুন ধারক শুরু করতে পারেন এবং ট্র্যাফিকটিকে মূল ধারকটিতে ফরোয়ার্ড করতে পারেন।

# docker run \
  --rm \
  -p $PORT:1234 \
  verb/socat \
    TCP-LISTEN:1234,fork \
    TCP-CONNECT:$TARGET_CONTAINER_IP:$TARGET_CONTAINER_PORT

কাজের উদাহরণ

এমন একটি ওয়েব-সার্ভিস চালু করুন যা 80 পোর্টে শোনা যায় তবে এর অভ্যন্তরীণ বন্দর 80 টি উন্মুক্ত করবেন না (উফ!):

# docker run -ti mkodockx/docker-pastebin   # Forgot to expose PORT 80!

এর ডকার নেটওয়ার্ক আইপি সন্ধান করুন:

# docker inspect 63256f72142a | grep IPAddress
                    "IPAddress": "172.17.0.2",

verb/socat8080 উন্মুক্ত পোর্ট দিয়ে লঞ্চ করুন এবং এটির আইপি-র 80 তে TCP ট্র্যাফিক ফরওয়ার্ড করুন:

# docker run --rm -p 8080:1234 verb/socat TCP-LISTEN:1234,fork TCP-CONNECT:172.17.0.2:80

আপনি এখন http: // লোকালহোস্ট: 8080 / এ পেস্টবিন অ্যাক্সেস করতে পারবেন এবং আপনার অনুরোধগুলি socat:1234এটিকে এগিয়ে পাঠায় pastebin:80এবং প্রতিক্রিয়াটি বিপরীতে একই পথে ভ্রমণ করে।


7
খুব চতুর! তবুও, সম্ভবত ব্যবহার করা ভাল verb/socat:alpine, যেহেতু এর চিত্রটির পাদদেশের 5% রয়েছে (আপনি যদি না libc বা DNS অসম্পূর্ণতাগুলিতে চলে যান )।
jpaugh

3
এছাড়াও আছেalpine/socat
জ্যাম্বি

3
দুর্দান্ত উত্তর। সাধারণ, একটি লাইনার যা কোনও ময়লা হ্যাক ছাড়াই এটি সম্পন্ন করবে।
ব্রুনো ব্রেন্ট

2
এটি আমার জন্য নিখুঁতভাবে কাজ করেছে, ধন্যবাদ! আমি একটি প্রবর্তন কমান্ড যুক্ত --net myfoldername_defaultকরতে হয়েছিল verb/socatযেহেতু আমি একটি ডকার রচনাতে আন-এক্সপোজড কনটেইনার শুরু করেছি যা একটি নেটওয়ার্ক তৈরি করে।
এমাজজোটটা

35

আইপেটেবল হ্যাকগুলি কমপক্ষে ডকার ১.৪.১ এ কাজ করে না।

সবচেয়ে ভাল উপায় হ'ল এক্সপোজেন পোর্ট সহ অন্য একটি ধারক চালানো এবং সকেটের সাথে রিলে করা। এসকিউএলপ্লাসের সাহায্যে ডাটাবেসের সাথে (অস্থায়ীভাবে) সংযোগ করার জন্য এটিই করেছি:

docker run -d --name sqlplus --link db:db -p 1521:1521 sqlplus

Dockerfile:

FROM debian:7

RUN apt-get update && \
    apt-get -y install socat && \
    apt-get clean

USER nobody

CMD socat -dddd TCP-LISTEN:1521,reuseaddr,fork TCP:db:1521

2
Iptables হ্যাকগুলি ডক পাত্রে নয়, হোস্ট মেশিন থেকে চালানোর কথা। এটি মূলত হোস্টের নির্দিষ্ট পোর্টগুলিতে অনুরোধগুলি যথাযথ ডকার কনটেইনার পোর্টগুলিতে ফরোয়ার্ড করছে। এটি মোটেও নির্দিষ্ট কিছু নয়, এবং আপনি এটি সম্পূর্ণ ভিন্ন হোস্টে করতে পারেন। আপনি কি নিজের ডকার ফাইলে কোড বিন্যাস যুক্ত করতে পারেন? এটি বেশ কার্যকর বলে মনে হচ্ছে।
অ্যাসিভ

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

4
আপনি এপলাইন / সকেট চেষ্টা করে দেখতে পারেন। এটি সকেট প্রিনস্টিন্ডল সহ আসে এবং কমান্ড হিসাবে সকেট বিকল্পগুলি গ্রহণ করে যাতে আপনার কোনও ডকফারফিল লেখার দরকার নেই।
trkoch

35

এখানে অন্য ধারণা। বন্দর ফরওয়ার্ডিং করতে এসএসএইচ ব্যবহার করুন; আপনার ডকার হোস্ট যখন ভিএম হয় তখন এটি ওএস এক্স (এবং সম্ভবত উইন্ডোজ) এ কাজ করার সুবিধাও পায়।

docker exec -it <containterid> ssh -R5432:localhost:5432 <user>@<hostip>

4
আমার ক্ষেত্রে যে ডকার ইমেজ চলছিল তাতে বাইনারি
এসএস নেই

আমার মেশিনে একটি এসএসএইচ কী তৈরি করতে এবং এটির জন্য ডকার পাত্রে রাখার দরকার আছে কি?
অষ্টাভিয়ান

কন্টেইনারটির ভিতরে @octavian ssh-keygen -t rsa। হোস্টে অনুমোদিত_কিগুলিতে পাব কী যুক্ত করুন
লুক ডাব্লু

8

আমাকে এই একই সমস্যাটি মোকাবেলা করতে হয়েছিল এবং আমার কোনও চলমান ধারক না থামিয়ে সমাধান করতে সক্ষম হয়েছি। এটি ডকারের ১.৯.১ ব্যবহার করে ফেব্রুয়ারী ২০১ 2016 পর্যন্ত আপ টু ডেট সমাধান। যাইহোক, এই উত্তরটি @ রিকার্ডো-ব্র্যাঙ্কোর জবাবের বিশদ সংস্করণ, তবে নতুন ব্যবহারকারীদের জন্য আরও গভীরতায়।

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

যেহেতু আমি বাহ্যিকভাবে মাইএসকিউএল ডাটাবেস অ্যাক্সেস করতে চাই (সিকুয়েল প্রো থেকে এসএসএইচ টানেলিংয়ের মাধ্যমে), তাই আমি 33306হোস্ট মেশিনে পোর্ট ব্যবহার করতে যাচ্ছি । (না 3306, কেবল কোনও ক্ষেত্রে বাহ্যিক মাইএসকিউএল ইনস্ট্যান্স চলছে))

প্রায় এক ঘন্টা টুইট করার জন্য iptables ফলহীন প্রমাণিত হয়েছে, যদিও:

ধাপে ধাপে, আমি যা করেছি তা এখানে:

mkdir db-expose-33306
cd db-expose-33306
vim Dockerfile

এডিট করুন dockerfile, এটি ভিতরে রেখে:

# Exposes port 3306 on linked "db" container, to be accessible at host:33306
FROM ubuntu:latest # (Recommended to use the same base as the DB container)

RUN apt-get update && \
    apt-get -y install socat && \
    apt-get clean

USER nobody
EXPOSE 33306

CMD socat -dddd TCP-LISTEN:33306,reuseaddr,fork TCP:db:3306

তারপরে ছবিটি তৈরি করুন:

docker build -t your-namespace/db-expose-33306 .

তারপরে আপনার চলমান ধারকটির সাথে যুক্ত হয়ে এটি চালান। ( স্পষ্টভাবে বন্ধ হওয়া এবং অপসারণ না হওয়া পর্যন্ত এটি পটভূমিতে রাখার -dপরিবর্তে ব্যবহার করুন -rmI আমি কেবল এটি চাই যে এটি এই ক্ষেত্রে সাময়িকভাবে চলমান))

docker run -it --rm --name=db-33306 --link the_live_db_container:db -p 33306:33306  your-namespace/db-expose-33306

আপনি সরাসরি ক্রিয়াপদ / সোকাট বা আলপাইন / সোকাট চিত্রটি ব্যবহার করতে পারেন। ক্রিয়াপদ / সাকট
pjotr_dolphin

7

গৃহীত উত্তরের iptables সমাধানটিতে যোগ করতে , এটি বাইরের বিশ্বে খোলার জন্য আমাকে হোস্টে আরও দুটি কমান্ড চালাতে হয়েছিল।

HOST> iptables -t nat -A DOCKER -p tcp --dport 443 -j DNAT --to-destination 172.17.0.2:443
HOST> iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.17.0.2 --destination 172.17.0.2 --dport https
HOST> iptables -A DOCKER -j ACCEPT -p tcp --destination 172.17.0.2 --dport https

দ্রষ্টব্য: আমি পোর্ট https (443) খুলছিলাম, আমার ডকার অভ্যন্তরীণ আইপি ছিল 172.17.0.2

দ্রষ্টব্য 2: এই নিয়মগুলি এবং অস্থায়ী এবং কেবলমাত্র ধারকটি পুনরায় চালু না হওয়া পর্যন্ত চলবে


এটি আমার পক্ষে কাজ করেছিল ... তবে পরে কিছু ক্যাভেট ছিল। নোট 2 অনুসারে, ধারকগুলি পুনরায় চালু করা হলে এটি থামবে, এটি তখন অন্য আইপিতে থাকতে পারে। তবে আরও গুরুত্বপূর্ণ বিষয় হল ডকারের এই অস্থির প্রবেশাধিকার সম্পর্কে কোনও ধারণা নেই, সুতরাং পরে যখন আপনি পরিষেবাটি পুরোপুরি পুনরায় চালু করবেন এবং সঠিকভাবে এটি করার জন্য ডকার পাবেন তখন এগুলি সরিয়ে দেওয়া হবে না। ফলস্বরূপ একাধিক iptable এন্ট্রিগুলি হুবহু একই ছিল, যার কারণ হিসাবে এটি কোনও ত্রুটি বা ইঙ্গিত সহ সামান্য ব্যর্থ হয়েছিল। অতিরিক্ত নিয়মগুলি শাসিত হওয়ার পরে সমস্যাটি বিলুপ্ত হয়ে গেল। অন্য শব্দে, আপনার আইপি টেবিলগুলি যেকোন পরিবর্তনের পরে খুব সাবধানে দেখুন।
অ্যান্থনি

5

আপনি একটি টানেল তৈরি করতে এবং আপনার হোস্টে আপনার ধারকটি প্রকাশ করতে এসএসএইচ ব্যবহার করতে পারেন।

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

উদাহরণস্বরূপ, পাত্রে, আপনি এটি করতে পারেন

$ yum install -y openssh openssh-server.x86_64
service sshd restart
Stopping sshd:                                             [FAILED]
Generating SSH2 RSA host key:                              [  OK  ]
Generating SSH1 RSA host key:                              [  OK  ]
Generating SSH2 DSA host key:                              [  OK  ]
Starting sshd:                                             [  OK  ]
$ passwd # You need to set a root password..

আপনি এই লাইন থেকে ধারক আইপি ঠিকানাটি খুঁজে পেতে পারেন (ধারকটিতে):

$ ifconfig eth0 | grep "inet addr" | sed 's/^[^:]*:\([^ ]*\).*/\1/g'
172.17.0.2

তারপরে হোস্টে আপনি কেবল এটি করতে পারেন:

sudo ssh -NfL 80:0.0.0.0:80 root@172.17.0.2

এটি আমার পক্ষে একটি ছোট সংশোধন করে ... এই আদেশটি কাজ করেছে: sudo ssh -NfL 25252: 172.17.0.50: 22 $ ব্যবহারকারী @ লোকালহোস্ট
আলেকজান্ডার গুও

3

যদি কারও জন্য কোনও উত্তর কাজ না করে - আপনার টার্গেট ধারকটি ইতিমধ্যে ডকার নেটওয়ার্কে চলছে কিনা তা পরীক্ষা করুন:

CONTAINER=my-target-container
docker inspect $CONTAINER | grep NetworkMode
        "NetworkMode": "my-network-name",

ভেরিয়েবলের জন্য এটি পরে সংরক্ষণ করুন $NET_NAME:

NET_NAME=$(docker inspect --format '{{.HostConfig.NetworkMode}}' $CONTAINER)

যদি হ্যাঁ, আপনার একই নেটওয়ার্কে প্রক্সি ধারকটি চালানো উচিত।

এরপরে ধারকটির জন্য নামটি দেখুন:

docker inspect $CONTAINER | grep -A2 Aliases
                "Aliases": [
                    "my-alias",
                    "23ea4ea42e34a"

ভেরিয়েবলের জন্য এটি পরে সংরক্ষণ করুন $ALIAS:

ALIAS=$(docker inspect --format '{{index .NetworkSettings.Networks "'$NET_NAME'" "Aliases" 0}}' $CONTAINER)

এড কনটেইনার এক্সপোজড (তবে প্রকাশিত হয়নি) বন্দরে ব্রিজ করার জন্য এখন socatনেটওয়ার্কের একটি পাত্রে চালান :$NET_NAME$ALIAS

docker run \
    --detach --name my-new-proxy \
    --net $NET_NAME \
    --publish 8080:1234 \
    alpine/socat TCP-LISTEN:1234,fork TCP-CONNECT:$ALIAS:80

2

আপনি ওয়েভ নেট এর মতো ওভারলে নেটওয়ার্ক ব্যবহার করতে পারেন যা প্রতিটি ধারককে একটি অনন্য আইপি ঠিকানা প্রদান করবে এবং স্পষ্টভাবে নেটওয়ার্কের প্রতিটি ধারক অংশে সমস্ত বন্দরকে প্রকাশ করবে।

ওয়েভ হোস্ট নেটওয়ার্কের সংহতকরণও সরবরাহ করে । এটি ডিফল্টরূপে অক্ষম করা হয়েছে তবে, আপনি হোস্টের থেকে ধারক আইপি ঠিকানাগুলি (এবং এর সমস্ত পোর্ট) অ্যাক্সেস করতে চাইলে আপনি কেবল রান চালাতে পারেন weave expose

সম্পূর্ণ প্রকাশ: আমি ওয়েভ ওয়ার্কসে কাজ করি।


2

একটি সুবিধাজনক HAProxy মোড়ক আছে।

docker run -it -p LOCALPORT:PROXYPORT --rm --link TARGET_CONTAINER:EZNAME -e "BACKEND_HOST=EZNAME" -e "BACKEND_PORT=PROXYPORT" demandbase/docker-tcp-proxy

এটি লক্ষ্য ধারকটিতে একটি HAProxy তৈরি করে। সহজ কিছু.


2

এখানে কিছু সমাধান রয়েছে:

https://forums.docker.com/t/how-to-expose-port-on-running-container/3252/12

ধারক চালানোর সময় ম্যাপিং পোর্টের সমাধান।

ডকার রান -d - নেট = হোস্ট মাইভিএনসি

এটি আপনার হোস্টটিতে স্বয়ংক্রিয়ভাবে পোর্টটিকে উন্মোচিত করবে এবং মানচিত্র করবে


1

প্রথমে রিকার্ডোর প্রতিক্রিয়া পড়ুন । এটি আমার পক্ষে কাজ করেছে।

যাইহোক, এমন একটি দৃশ্যের উপস্থিতি রয়েছে যেখানে চলমান ধারকটিকে ডকার-কম্পোজ ব্যবহার করে লাথি মেরে ফেলে দিলে এটি কাজ করবে না। এটি কারণ ডকার-কমপোজ (আমি ডকার 1.17 চালাচ্ছি) একটি নতুন নেটওয়ার্ক তৈরি করে। এই পরিস্থিতি সম্বোধনের উপায় হবে

docker network ls

তারপরে নিম্নলিখিতটি সংযোজন করুন docker run -d --name sqlplus --link db:db -p 1521:1521 sqlplus --net network_name


0

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

ম্যাকভ্লান ইন্টারফেস

ডকারে এখন একটি ম্যাকভ্লান নেটওয়ার্ক ড্রাইভার অন্তর্ভুক্ত রয়েছে । এটি একটি "রিয়েল ওয়ার্ল্ড" ইন্টারফেসের সাথে একটি ডকার নেটওয়ার্ক সংযুক্ত করে এবং আপনাকে সেই নেটওয়ার্কগুলির ঠিকানাগুলি সরাসরি ধারককে (ভার্চুয়াল মেশিনগুলি ব্রিজড মোডের মতো) সরাসরি বরাদ্দ করতে দেয়।

docker network create \
    -d macvlan \
    --subnet=172.16.86.0/24 \
    --gateway=172.16.86.1  \
    -o parent=eth0 pub_net

pipeworkএকটি ধারকটিতে একটি বাস্তব ইন্টারফেসও ম্যাপ করতে পারে বা ডকারের পুরানো সংস্করণগুলিতে একটি সাব ইন্টারফেস সেটআপ করতে পারে ।

রাউটিং আইপি এর

আপনার যদি নেটওয়ার্কের নিয়ন্ত্রণ থাকে তবে আপনি ধারকগুলিতে ব্যবহারের জন্য আপনার ডকার হোস্টে অতিরিক্ত নেটওয়ার্কগুলি রুট করতে পারেন ।

তারপরে আপনি সেই নেটওয়ার্কটি ধারকগুলিতে নির্ধারণ করুন এবং পকেটগুলি ডকার নেটওয়ার্কের মাধ্যমে রুট করার জন্য আপনার ডকার হোস্ট সেটআপ করুন।

ভাগ করা হোস্ট ইন্টারফেস

--net hostবিকল্প হোস্ট ইন্টারফেস একটি ধারক মধ্যে ভাগ করা করার অনুমতি দেয় কিন্তু এই সম্ভবত ভাগ প্রকৃতির কারণে এক হোস্ট একাধিক পাত্রে চলমান একটি ভাল সেটআপ করা নেই।

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