কীভাবে ডকারের ধারক থেকে হোস্ট পোর্টটি অ্যাক্সেস করবেন


277

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

সম্পাদনা: আমি লিনাক্স মেশিনে স্থানীয়ভাবে ডকার চালাচ্ছি।

হালনাগাদ:

হোস্ট মেশিন থেকে হোস্ট আইপি-র আইপি ঠিকানা পেতে, নীচে @ অ্যালার্কসের উত্তর ছাড়াও, আমি নিম্নলিখিতগুলি করি:

ip addr show docker0 | grep -Po 'inet \K[\d.]+'

এটি একটি ভয়ানক উত্তর হওয়ায় একটি মন্তব্য ব্যবহার করা, তবে আমি বিশ্বাস করি আপনি সাধারণত 172.17.1.78 এ এটি অ্যাক্সেস করতে পারবেন - যদি না এটি কোনও বুট 2 ডকার সেটআপ থাকে।
ক্যাশসক্লে

@ ক্যাসআইস ক্লে আমি এটি চেষ্টা করেছিলাম এবং এই ত্রুটিটি এখনও পেয়েছিcurl: (7) Failed to connect to 172.17.1.78 port 7000: No route to host
ট্রাই

আপনি নির্দিষ্ট করেন নি; আপনি কি বুট 2 ডকার চালাচ্ছেন, বা আপনি লিনাক্সে স্থানীয়ভাবে ডকার চালাচ্ছেন?
লারস্ক

@ আলার্কস দুঃখিত, আমি সবেমাত্র প্রশ্নটি আপডেট করেছি - আমি এটি স্থানীয়ভাবে লিনাক্সে চালাচ্ছি।
ত্রি এনগুইন

উত্তর:


206

মূলত লিনাক্সে ডকার চালানোর সময়, আপনি docker0ইন্টারফেসের আইপি ঠিকানা ব্যবহার করে হোস্ট পরিষেবাগুলিতে অ্যাক্সেস করতে পারেন । ধারকটির ভিতরে থেকে এটি আপনার ডিফল্ট রুট হবে।

উদাহরণস্বরূপ, আমার সিস্টেমে:

$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link 
       valid_lft forever preferred_lft forever

এবং একটি ধারক ভিতরে:

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  src 172.17.0.4 

একটি সাধারণ শেল স্ক্রিপ্ট ব্যবহার করে এই আইপি ঠিকানাটি বের করা মোটামুটি সহজ:

#!/bin/sh

hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip

iptablesডকার পাত্রে থেকে সংযোগের অনুমতি দেওয়ার জন্য আপনার হোস্টের নিয়মগুলি সংশোধন করার দরকার হতে পারে । এর মতো কিছু কৌশলটি করবে:

# iptables -A INPUT -i docker0 -j ACCEPT

এটি ডকার পাত্রে থেকে হোস্টের যে কোনও পোর্টে অ্যাক্সেসের অনুমতি দেবে। মনে রাখবেন যে:

  • iptables নিয়মগুলি অর্ডার করা হয়, এবং এই নিয়মটি এর আগে অন্যান্য নিয়মগুলি কী আসে তার উপর নির্ভর করে সঠিক কাজটি করতে পারে বা নাও করতে পারে।

  • আপনি কেবল (ক) শোনার জন্য INADDR_ANY(আ। 0.0.0.0) বা docker0ইন্টারফেসে স্পষ্টভাবে শুনছেন এমন হোস্ট পরিষেবাগুলিতে অ্যাক্সেস করতে সক্ষম হবেন ।


1
ধন্যবাদ। আইপি অ্যাড্রেস পাওয়া আমার পক্ষে প্রয়োজনীয় ছিল, iptables পরিবর্তন না করে :)
ট্রি ট্রিগুইন


7
ম্যাকের জন্য ডকার কীভাবে? এএফআইকে "ম্যাকের জন্য ডকার" এর জন্য কোনও ডকার0 নেটওয়ার্ক উপলভ্য নয়। সেক্ষেত্রে আমি কীভাবে ধারক থেকে হোস্টের সাথে সংযোগ করতে পারি?
বিজয়

17
যদি তুমি ম্যাক বনাম 17,06 অথবা উপরে জন্য Docker ব্যবহার করেন, শুধু ব্যবহার docker.for.mac.localhostপরিবর্তে localhostবা 127.0.0.1। এখানে ডক
মেরিটো

1
আমি আইপি ঠিকানা পাওয়ার পরিবর্তে আমার হোস্টের হোস্ট-নেম ব্যবহার করেছি (হোস্টে হোস্টনেম কমান্ড)
মারেক এফ

311

ম্যাকোস এবং উইন্ডোজের জন্য

ডকার ভি 18.03 এবং তার বেশি (21 শে মার্চ 2018 এর পরে)

আপনার অভ্যন্তরীণ আইপি ঠিকানাটি ব্যবহার করুন বা বিশেষ ডিএনএস নামের সাথে সংযুক্ত করুন host.docker.internalযা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সমাধান করবে।

লিনাক্স সমর্থন https://github.com/docker/for-linux/issues/264 এর জন্য মুলতুবি রয়েছে

ডকরের পূর্ববর্তী সংস্করণ সহ ম্যাকওএস

ম্যাক ভি 17.12 থেকে 18.02 এর জন্য ডকার

উপরের মতো একই তবে docker.for.mac.host.internalপরিবর্তে ব্যবহার করুন।

ম্যাক ভি 17.06 থেকে ভি 17.11 এর জন্য ডকার

উপরের মতো একই তবে docker.for.mac.localhostপরিবর্তে ব্যবহার করুন।

ম্যাক 17.05 এবং নীচের জন্য ডকার

ডকার কনটেইনার থেকে হোস্ট মেশিনটি অ্যাক্সেস করতে আপনাকে অবশ্যই আপনার নেটওয়ার্ক ইন্টারফেসের সাথে একটি আইপি উলাম যুক্ত করতে হবে। আপনি যে কোনও আইপি বাঁধতে পারেন, কেবল এটি নিশ্চিত করুন যে আপনি এটি অন্য কোনও কিছুর সাথে ব্যবহার করছেন না।

sudo ifconfig lo0 alias 123.123.123.123/24

তারপরে নিশ্চিত হয়ে নিন যে আপনার সার্ভারটি উপরে বর্ণিত আইপি শুনছে বা 0.0.0.0। যদি এটি লোকালহোস্টে শুনছে তবে এটি 127.0.0.1সংযোগটি গ্রহণ করবে না।

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

পরীক্ষা করতে আপনি ধারকটির curl -X GET 123.123.123.123:3000ভিতরে কিছু চালাতে পারেন ।

উপনামটি প্রতিটি রিবুটে রিসেট হবে তাই প্রয়োজনে একটি স্টার্ট-আপ স্ক্রিপ্ট তৈরি করুন।

সমাধান এবং আরও ডকুমেন্টেশন এখানে: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds


আমি এটি সফলভাবে পরীক্ষা করেছি। ফায়ারওয়ালটি বন্ধ করার দরকার নেই
alvaro g

15
১ 17.০6 এর পর থেকে জুন ২০১ in এ প্রকাশিত হ'ল তাদের সুপারিশটি হল বিশেষ ম্যাক-কেবলমাত্র ডিএনএস নামের সাথে সংযোগ স্থাপন docker.for.mac.localhostযা হোস্টের দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সাথে সমাধান করবে! ... আমি এটি পরীক্ষা করেছি এবং এটি আসলে কাজ করছে! :)
কিআর

আমার মতো ম্যাক ব্যবহারকারীদের উত্তরের জন্য স্পট। ধন্যবাদ। একটি জিনিস যদিও আমি পাই না তা হ'ল কেন ip route show | awk '/default/ {print $3}'একটি আইপি দান এবং docker.for.mac.localhostঅন্যটি।
dmmd


1
host.docker.internalডকার পাত্রে ব্যবহারের পরামর্শ দিন 127.0.0.1 host.docker.internalএবং হোস্ট ফাইলটিতে কনফিগার করুন।
জুন্লিন

83

--net="host"আপনার docker runকমান্ড ব্যবহার করুন , তারপরে localhostআপনার ডকার পাত্রে আপনার ডকার হোস্টকে নির্দেশ করবে।


15
ভার্চুয়ালাইজড পরিবেশে কনটেইনারগুলি চালিত হওয়ার কারণে আমি যতদূর বুঝতে পারি উইন্ডোজ / ডকারের জন্য ডিপিকার ব্যবহার করছেন তাদের পক্ষে কাজ করবেন না: হাইপার-ভি (উইন্ডোজ) / এক্সহাইভ (ম্যাক)
নিনজবয়

6
এই! এই উত্তর!
ব্যবহারকারী3751385

13
কেবল রেকর্ডের জন্য: ডকার কমপোনসের মধ্যে, network_mode: "host"
জব্রোস

এটি ক্লায়েন্ট এবং সার্ভারে মক সংস্করণ 19.03.1 এর জন্য ডকারে আমার পক্ষে কাজ করছে না। আমি আশা করি এটি কাজ করছিল, তবে তা হয়নি।
কাদামাটি

1
এমনকি যদি আমি ম্যাক এ থাকি তবে এটি কার্যকর হয় যখন আপনি দুটি
ডকারের ধারকগুলির

26

ডকার-রচনার সাথে সমাধান: হোস্ট-ভিত্তিক পরিষেবাটিতে অ্যাক্সেসের জন্য আপনি network_modeপ্যারামিটার ব্যবহার করতে পারেন https://docs.docker.com/compose/compose-file/#network_mode

version: '3'
services:
  jenkins:
    network_mode: host

2020-04-27 সম্পাদনা করুন: কেবল স্থানীয় বিকাশের পরিবেশে ব্যবহারের জন্য প্রস্তাবিত।


তাহলে কীভাবে জিনকিন্স অ্যাক্সেস করবেন? হোস্ট নেটওয়ার্ক মোড ব্যবহার করা হলে পোর্ট ফরওয়ার্ডিং কাজ করছে না বলে মনে হচ্ছে
জেফ টিয়ান

1
এটি একটি খুব ঝুঁকিপূর্ণ সমাধান এবং প্রস্তাবিত মোটেই নয়। স্পষ্টভাবে প্রয়োজন না হলে আমাদের হোস্ট নেটওয়ার্কটি পাত্রে খোলা উচিত নয়
ফাতেমেহ মাজদ

12

বর্তমানে ম্যাক এবং উইন্ডোজে এটি করার সহজতম host.docker.internalউপায়টি হোস্ট ব্যবহার করছে , যা মেশিনের আইপি ঠিকানা হোস্ট করার সমাধান করে। দুর্ভাগ্যক্রমে এটি এখনও লিনাক্সে কাজ করে না (এপ্রিল 2018 হিসাবে)।


এই সমাধানটি ডকার সংস্করণ 19.03.1 এর সাথে কাজ করেছে। এখানে দেওয়া আরও অনেকগুলি সমাধান কাজ করে না। এটি নথিভুক্ত করা হয়েছে ডকস.ডকার
মাটির

12

আমি https://github.com/qoomon/docker-host ঠিক এটি করার জন্য একটি ডকার ধারক তৈরি করেছি

তারপরে আপনি হোস্ট সিস্টেম অ্যাক্সেস করতে কেবল ধারক নেম ডিএনএস ব্যবহার করতে পারেন curl http://dockerhost:9200


এটি একটি চতুর সমাধান। আপনি প্রচুর ট্র্যাফিক দিয়ে এটি ব্যবহার করার বিষয়ে কি সচেতন? এই ধারকটির মাধ্যমে সমস্ত ট্র্যাফিক প্রক্সিং করার জন্য ওভারহেড থাকতে পারে।
বকফোলান

3
হ্যাঁ এটি মোটামুটি কোনও ওভারহেডের পক্ষে বেশ চমৎকার কাজ করে কারণ এটি কেবল লুপব্যাক-ডিভাইসে কাজ করে
qoomon

11

আমরা দেখতে পেয়েছি যে এই সমস্ত নেটওয়ার্কিং জাঙ্কের একটি সহজ সমাধান হ'ল পরিষেবার জন্য ডোমেন সকেট ব্যবহার করা। যদি আপনি যেভাবেই হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করছেন, কেবলমাত্র ভলিউম হিসাবে সকেটটি মাউন্ট করুন এবং আপনি নিজের পথে যাচ্ছেন। পোস্টগ্র্যাস্কেলের জন্য এটি এতটা সহজ ছিল:

docker run -v /var/run/postgresql:/var/run/postgresql

তারপরে আমরা কেবলমাত্র সকেটটি নেটওয়ার্কের পরিবর্তে ব্যবহার করতে আমাদের ডাটাবেস সংযোগ স্থাপন করেছি। আক্ষরিক যে সহজ।


এটি একটি দুর্দান্ত সমাধান। চমৎকার কাজ!
একটি প্রদত্ত শিহরিত

2
এফওয়াইআই, আমরা এটি নিয়ে একটি বড় সমস্যায় পড়েছি: ম্যাকের জন্য ডকার মাউন্ট ভলিউম হিসাবে সকেটগুলি সমর্থন করে না। ম্যাক ব্যক্তি চেষ্টা না করা অবধি এটি সাঁতার কাটতে পারে। :(
mlissner

ধন্যবাদ! লিনাক্সে কবজির মতো কাজ করেছেন!
মার্সেলো কার্ডোসো

7

আমি বিভিন্ন সমাধান অনুসন্ধান করেছি এবং আমি এটি হ'ল সমাধান খুঁজে পাচ্ছি:

  1. ব্রিজ গেটওয়ে আইপির জন্য একটি স্থির আইপি ঠিকানা সংজ্ঞায়িত করুন।
  2. extra_hostsনির্দেশিকায় অতিরিক্ত প্রবেশ হিসাবে গেটওয়ে আইপি যুক্ত করুন ।

একমাত্র ক্ষতি হ'ল যদি আপনার একাধিক নেটওয়ার্ক বা প্রকল্পগুলি এটি করে থাকে তবে আপনাকে তাদের আইপি ঠিকানার পরিসীমা দ্বন্দ্ব না করে তা নিশ্চিত করতে হবে।

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

version: '2.3'

services:
  redis:
    image: "redis"
    extra_hosts:
      - "dockerhost:172.20.0.1"

networks:
  default:
    ipam:
      driver: default
      config:
      - subnet: 172.20.0.0/16
        gateway: 172.20.0.1

তারপরে আপনি হোস্টনাম "ডকারহোস্ট" ব্যবহার করে ধারকটির ভিতরে থেকে হোস্টের পোর্টগুলি অ্যাক্সেস করতে পারেন।


7

লিনাক্স সিস্টেমের জন্য, আপনি - প্রধান সংস্করণ থেকে শুরু করে 20.04- এখন হোস্টের মাধ্যমেও যোগাযোগ করতে পারেন host.docker.internal। এটি স্বয়ংক্রিয়ভাবে কাজ করবে না , তবে আপনাকে নিম্নলিখিত রান ফ্ল্যাগ সরবরাহ করতে হবে:

--add-host=host.docker.internal:host-gateway

দেখা


3

আপনি স্থানীয় ওয়েবসারভারটি অ্যাক্সেস করতে পারেন যা আপনার হোস্ট মেশিনে দুটি উপায়ে চলছে।

  1. পাবলিক আইপি সহ 1 টি পন্থা

    জেনকিনস ডকার পাত্রে ওয়েব সার্ভার অ্যাক্সেস করতে হোস্ট মেশিনের সর্বজনীন আইপি ঠিকানা ব্যবহার করুন।

  2. হোস্ট নেটওয়ার্কের সাথে অ্যাপ্রোচ 2

    হোস্টের নেটওয়ার্ক স্ট্যাকের জেনকিনস ডকার ধারক যুক্ত করতে "--net হোস্ট" ব্যবহার করুন। হোস্টের স্ট্যাকে স্থাপন করা পাত্রে হোস্ট ইন্টারফেসে সম্পূর্ণ অ্যাক্সেস রয়েছে। আপনি হোস্ট মেশিনের একটি ব্যক্তিগত আইপি ঠিকানা সহ ডকার পাত্রে স্থানীয় ওয়েবসার্ভার অ্যাক্সেস করতে পারেন।

NETWORK ID          NAME                      DRIVER              SCOPE
b3554ea51ca3        bridge                    bridge              local
2f0d6d6fdd88        host                      host                local
b9c2a4bc23b2        none                      null                local

হোস্ট নেটওয়ার্কের সাথে একটি ধারক শুরু করুন Eg: docker run --net host -it ubuntuএবং ifconfigসমস্ত উপলভ্য নেটওয়ার্ক আইপি অ্যাড্রেসগুলি তালিকাভুক্ত করুন যা ডকার ধারক থেকে পৌঁছনীয়।

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

docker run --net host -it ubuntu

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a604f7af5e36        ubuntu              "/bin/bash"         22 seconds ago      Up 20 seconds                           ubuntu_server

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

root@linuxkit-025000000001:/# curl 192.168.x.x -I
HTTP/1.1 200 OK
Server: nginx/1.15.10
Date: Tue, 09 Apr 2019 05:12:12 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 26 Mar 2019 14:04:38 GMT
Connection: keep-alive
ETag: "5c9a3176-264"
Accept-Ranges: bytes

3

docker-composeকনটেইনারগুলির মধ্যে একটি প্রাইভেট নেটওয়ার্ক তৈরির জন্য ব্রিজ নেটওয়ার্কিং ব্যবহারের জন্য গ্রহণযোগ্য সমাধানটি ব্যবহার docker0করে না কারণ পাত্রে প্রাপ্ত অ্যাড্রেস ইন্টারফেসটি নয় docker0বরং পরিবর্তে এটি একটি এলোমেলোভাবে উত্পন্ন ইন্টারফেস আইডি, যেমন:

$ ifconfig

br-02d7f5ba5a51: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.32.1  netmask 255.255.240.0  broadcast 192.168.47.255

দুর্ভাগ্যক্রমে যে এলোমেলো আইডি অনুমানযোগ্য নয় এবং প্রতিবার রচনাটি নেটওয়ার্কটি পুনরায় তৈরি করতে হবে (যেমন হোস্ট পুনরায় বুট করাতে হবে) change এর আমার সমাধান হ'ল একটি পরিচিত সাবনেটে ব্যক্তিগত নেটওয়ার্ক তৈরি করা এবং iptablesসেই ব্যাপ্তিটি স্বীকার করার জন্য কনফিগার করা:

রচনা ফাইল স্নিপেট:

version: "3.7"

services:
  mongodb:
    image: mongo:4.2.2
    networks:
    - mynet
    # rest of service config and other services removed for clarity

networks:
  mynet:
    name: mynet
    ipam:
      driver: default
      config:
      - subnet: "192.168.32.0/20"

আপনার পরিবেশের প্রয়োজন হলে আপনি সাবনেটটি পরিবর্তন করতে পারেন। আমি ইচ্ছামত নির্বাচিত 192.168.32.0/20ব্যবহার করে docker network inspectতা দেখতে ডিফল্ট দ্বারা নির্মিত হচ্ছে।

iptablesউত্স হিসাবে ব্যক্তিগত সাবনেট অনুমতি দিতে হোস্টে কনফিগার করুন:

$ iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPT

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

এই পদ্ধতির পুনরাবৃত্তিযোগ্য এবং তাই স্বয়ংক্রিয়ভাবে হওয়ার সুবিধা রয়েছে। আমি এর ansible ব্যবহার templateমডিউল পরিবর্তনশীল প্রতিকল্পন সঙ্গে আমার রচনা ফাইল স্থাপন এবং তারপর ব্যবহার করতে iptablesএবং shellকনফিগার করার মডিউল এবং ফায়ারওয়াল নিয়ম জিদ যথাক্রমে।


আমি একাধিক উত্তর প্রস্তাব দেওয়ার জন্য দেখেছি iptables -A INPUT -i docker0 -j ACCEPT, তবে এটি আমার কোনও iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPTউপকারে আসেনি, যদিও এখানে প্রস্তাবিতগুলি আমার সমস্যার সমাধান করেছে।
টেরি ব্রাউন

1

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

এছাড়াও, ইউএসইন --net="host"অ্যাপ্রোচটি হ'ল রুট অ্যাপ্রোচ যা প্রযোজ্য নয় যখন কেউ বিভিন্ন পাত্রে ভাল বিচ্ছিন্ন নেটওয়ার্ক কনফিগারেশন রাখতে চান।

সুতরাং, আমার পদ্ধতির পক্ষে হোস্টের পাশে হোস্টের ঠিকানাটি বের করা এবং তারপরে --add-hostপ্যারামিটার সহ এটি ধারকটিতে পৌঁছে দেওয়া :

$ docker run --add-host=docker-host:`ip addr show docker0 | grep -Po 'inet \K[\d.]+'` image_name

বা, পরিবেশের পরিবর্তনশীলতে হোস্টের আইপি ঠিকানাটি সংরক্ষণ করুন এবং ভেরিয়েবলটি পরে ব্যবহার করুন:

$ DOCKERIP=`ip addr show docker0 | grep -Po 'inet \K[\d.]+'`
$ docker run --add-host=docker-host:$DOCKERIP image_name

এবং তারপরে docker-hostকনটেইনার হোস্ট ফাইলটিতে যুক্ত করা হয় এবং আপনি এটি আপনার ডাটাবেস সংযোগের স্ট্রিং বা এপিআই URL এ ব্যবহার করতে পারেন।


0

যখন আপনার কাছে দুটি ডকার ইমেজ "ইতিমধ্যে" তৈরি হয়েছে এবং আপনি একে অপরের সাথে যোগাযোগের জন্য দুটি পাত্রে রাখতে চান।

তার জন্য, আপনি প্রতিটি কনটেইনারকে তার নিজস্ব - নাম দিয়ে সুবিধাজনকভাবে চালনা করতে পারেন এবং তাদের মধ্যে যোগাযোগ সক্ষম করতে - লিঙ্ক পতাকা ব্যবহার করতে পারেন। যদিও ডকার বিল্ডের সময় আপনি এটি পাবেন না।

আপনি যখন আমার মতো দৃশ্যে থাকবেন এবং এটি আপনার

docker build -t "centos7/someApp" someApp/ 

আপনি যখন চেষ্টা করবেন তখন তা ভেঙে যায়

curl http://172.17.0.1:localPort/fileIWouldLikeToDownload.tar.gz > dump.tar.gz

এবং আপনি "কার্ল / উইজেট" "হোস্টের পথে" না ফেরার পথে আটকে যান।

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

নিম্নলিখিত ব্যাখ্যাগুলিতে এর জন্য ব্যাখ্যাটি বিশদে বর্ণনা করা হয়েছে।

http://www.dedoimedo.com/computers/docker-networking.html

দুটি দ্রুত কাজের সীমা দেওয়া হয়েছে যা আপনাকে নেটওয়ার্ক সুরক্ষা কমিয়ে দিয়ে চলতে সহায়তা করে।

সবচেয়ে সহজ বিকল্প হ'ল ফায়ারওয়ালটি বন্ধ করে দেওয়া - বা সকলকে অনুমতি দেওয়া। এর অর্থ প্রয়োজনীয় কমান্ড চালানো, যা সিস্টেমেটেল স্টপ ফায়ারওয়াল্ড, iptables -F বা সমতুল্য হতে পারে।

এই তথ্য আপনি সাহায্য করে আশা করি।


3
ঠিক যেমন একটি নোট, --linkএখন
অবহেলা করা

0

আমার জন্য (উইন্ডোজ 10, ডকার ইঞ্জিন v19.03.8) এটি https://stackoverflow.com/a/43541732/7924573 এবং https://stackoverflow.com/a/50866007/7924573 এর মিশ্রণ ছিল ।

  1. হোস্ট / আইপি কে হোস্ট.ডোকার.ইনটার্নাল
    যেমন: LOGGER_URL = " http: //host.docker.intern: 8085 / log " এ পরিবর্তন করুন
  2. সেতুতে নেটওয়ার্ক_মোড সেট করুন (আপনি যদি পোর্ট ফরওয়ার্ডিং বজায় রাখতে চান; হোস্ট ব্যবহার না করেন ):
    version: '3.7' services: server: build: . ports: - "5000:5000" network_mode: bridge অথবা বিকল্পভাবে: --net="bridge"আপনি ডকার-কমপোজ ব্যবহার না করে থাকলে ব্যবহার করুন ( https://stackoverflow.com/a/48806927/7924573 এর অনুরূপ )
    পূর্ববর্তী উত্তরে যেমন উল্লেখ করা হয়েছে: এটি কেবল স্থানীয় বিকাশের পরিবেশে ব্যবহার করা উচিত ।
    আরও তথ্যের জন্য পড়ুন: https://docs.docker.com/compose/compose-file/#network_mode এবং https://docs.docker.com/docker- for-windows/ networking /# use- cases- and- work
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.