ডকার কনটেইনারের ভিতরে থেকে কীভাবে ডকার হোস্টের আইপি ঠিকানা পাবেন


358

যেমন শিরোনাম বলেছেন। আমার হোস্ট থেকে কনটেইনার পর্যন্ত আইপি ঠিকানা ডকার হোস্ট এবং পোর্টম্যাপগুলি পুনরুদ্ধার করতে এবং পাত্রে এটি করতে সক্ষম হতে হবে।


আপনি কীভাবে এই তথ্যটি ব্যবহার করতে চান তা ব্যাখ্যা করতে পারেন? আপনি "ডকার হোস্ট" বলেছিলেন - আপনি কি একাধিক হোস্টে ডকার চালাচ্ছেন? আপনার ধারকটি একবার হোস্ট এবং পোর্টম্যাপের আইপি ঠিকানা জানতে পারলে এটি কী করবে?
অ্যান্ডি

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

উত্তর:


314
/sbin/ip route|awk '/default/ { print $3 }'

যেমনটি @ মিশেলনিলে লক্ষ্য করেছেন, এই পদ্ধতিটি ব্যবহার করার কোনও বুদ্ধি নেই Dockerfile(কেবলমাত্র যখন বিল্ডিংয়ের সময় আমাদের এই আইপিটির প্রয়োজন হয় তা বাদে), কারণ এই আইপিটি বিল্ড টাইমের সময় হার্ডকোডযুক্ত থাকবে।


49
আপনি যখন কনটেইনারগুলির জন্য ডকার ব্রিজ (ডিফল্ট) ব্যবহার করছেন, এটি হোস্টের আইপি যেমন 192.168.1.x এর চেয়ে 172.17.42.1 এর মতো ব্রিজ আইপি আউটপুট দেবে (আমি ধরে নিচ্ছি যে আপনার হোস্টটি কোনও হোম নেটে আছে)। আপনি ম্যাগনো টরেস উত্তরটি ব্যবহার করে আপনি যদি 192.168.1.x ঠিকানা চান তবে সম্ভবত লোকেরা এই জাতীয় পরিস্থিতিতে কী চায়।
প্রোগ্রামার্সে

2
যেটি RUN আপনার প্রত্যাশা মতো কাজ করবে না - এটি কেবল নির্মানের সময় আইপি গণনা করবে - এবং এর পরে চিরকাল স্থির থাকবে, এবং কার্যকর হবে না। এটি বিল্ড হোস্টের আইপি হবে।
মাইকেল নিল

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

1
@ মিশেলনিয়েল, আগের মতোই, আমি ধরে নেব যে ডোকর দিয়ে শুরু করা বেশিরভাগ লোকদের তাদের হোস্ট এবং ধারকটির মধ্যে একটি সংযোগ প্রয়োজন, এটিই। যদি কেউ "যথাযথ" মোতায়েন করছেন, সম্ভবত তিনি যেভাবেই হোক ডকার ব্রিজ ব্যবহার করছেন না, তিনি কাস্টম নেটওয়ার্কিং ব্যবহার করছেন এবং সম্ভবত তিনি সমস্ত নেটওয়ার্ক quirks সম্পর্কে অবগত আছেন বা তাদের ডিএনএস আছে (বা যা কিছু আবিষ্কার হয়েছে) সেটআপ রয়েছে।
স্পিনাস

1
@ স্পিনাস - তবে এটি কেবল তখনই বৈধ হবে যদি এটি যে হোস্টটি নির্মিত হয়েছিল তার উপর চালিত হয় - সেই ক্ষেত্রে - আপনি কেবল এটি হার্ড কোড করতে পারেন - বা এটি সন্ধান করতে পারেন - আমি মনে করি এটি একটি সহায়ক উত্তর নয় এবং অনেকগুলি বিভ্রান্ত করবে জনগণের - আপনাকে এটি সরিয়ে দেওয়ার পরামর্শ দিচ্ছে। (দ্য বিট বিট)
মাইকেল নেল

182

18.03 সংস্করণ হিসাবে, আপনি host.docker.internalহোস্টের আইপি হিসাবে ব্যবহার করতে পারেন ।

কাজ Mac এর জন্য Docker , Windows এর জন্য Docker , এবং সম্ভবত অন্য প্ল্যাটফর্মে হিসাবে ভাল।

এটি ম্যাক-নির্দিষ্ট থেকে একটি আপডেট docker.for.mac.localhost, সংস্করণ ১ version.০6 docker.for.mac.host.internalথেকে পাওয়া যায় এবং সংস্করণ ১ 17.১২ থেকে পাওয়া যায় যা এখনও সেই প্ল্যাটফর্মে কাজ করতে পারে।

দ্রষ্টব্য, ম্যাক এবং উইন্ডোজ ডকুমেন্টেশনের মতো, এটি কেবল বিকাশের উদ্দেশ্যে।

উদাহরণস্বরূপ, আমার হোস্টে পরিবেশ পরিবর্তনশীল রয়েছে:

MONGO_SERVER=host.docker.internal

আমার docker-compose.ymlফাইলে আমার কাছে এটি রয়েছে:

version: '3'

services:
  api:
    build: ./api
    volumes:
      - ./api:/usr/src/app:ro
    ports:
      - "8000"
    environment:
      - MONGO_SERVER
    command: /usr/local/bin/gunicorn -c /usr/src/app/gunicorn_config.py -w 1 -b :8000 wsgi

2
@ অ্যালানবেরি দুর্ভাগ্যক্রমে ডকার লোকেরা আমাদের এটি করার জন্য প্ল্যাটফর্ম-স্বতন্ত্র উপায় না দেওয়া পছন্দ করে কারণ তারা অনিচ্ছাকৃত ব্যবহারের মামলাগুলি গ্রহণ করতে পছন্দ করেন না (যেমন কোনও ডকারের ধারক থেকে স্থানীয় মেশিনে কোনও পরিষেবা অ্যাক্সেস করা)
অ্যান্ডি

21
আমার একবার ডকারের সাথে পরিচয় হয়েছিল যেমন এটি একবার বিল্ড করুন, এটিকে সর্বত্র চালান। তবে এটি একট্যালি মিথ্যা কারণ আপনার সর্বদা হোস্ট সিস্টেমটিও কনফিগার করতে হবে। তাই docker.for.mac..অকেজো কারণ যেহেতু বেশিরভাগ ক্ষেত্রে আপনার কাছে আপনার কোম্পানিতে লিনাক্স বা ম্যাক-কেবল পরিবেশ নেই। এটি মিশ্রিত, আপনার লিনাক্স এবং ম্যাক এবং উইন্ডোজ ব্যবহার করে ডেভ রয়েছে। 99% এর মধ্যে এটি একটি মিশ্র হোস্ট ওএস পরিবেশের কারণে এই ডোমেনটির কোনও ধারণা নেই। আমি ম্যাকস এর অধীনে একটি ধারক বিকাশ করি না এবং এটি একটি ম্যাকোএস সার্ভারে স্থাপন করি। আমি এটি লিনাক্সে স্থাপন করি। সবাই এটাই করে। সুতরাং এমনকি পুরো পয়েন্ট কি docker.for.mac..?
TheFox

1
@ অ্যালানবেরি docker.for.mac.host.internalআপনি ডকারটি ব্যবহার করছেন বা ব্যবহার করছেন কিনা তা বিবেচ্য নয় docker-compose। আমি কনফিগারেশন ফাইলগুলিতে একটি নির্দিষ্ট হোস্ট ব্যবহার করতে চাই। আইডিকে, উদাহরণস্বরূপ, docker.host.internalযা সর্বদা হোস্ট আইপি ঠিকানার দিকে নির্দেশ করে। আমি যে হোস্ট সিস্টেমটি ব্যবহার করি না কেন। এটি ডকারকে একেবারে ব্যবহার করার পুরো বিষয়টি: আমি স্বায়ত্তশাসিত হতে চাই। আমি বুঝতে পারি যে এটি ম্যাকওএসে আরও কৌশলযুক্ত কারণ আপনার হোস্ট সিস্টেম এবং ধারকটির মধ্যে অন্য একটি স্তর রয়েছে। তবে যাইহোক, আমার মতে docker.for.mac.host.internalএটি অকার্যকর যদি আপনি কেবল এটি ম্যাকওএসের জন্য ব্যবহার করতে পারেন।
TheFox

1
host.docker.internal উইন্ডোজের জন্যও ডকারে কাজ করে , কমপক্ষে এই মন্তব্যটি লেখার সময়।
joanlofe

1
এটি পুরোপুরি কাজ করে, আমার একটি পাত্রে উইন্ডোজ এবং জেনকিনগুলি চালনার জন্য ডকারকী রয়েছে। আমি জিনকিনের মধ্যে ডকার কমান্ড চালাতে চেয়েছিলাম কিন্তু ডকার অ্যাড ক্লাউড স্টেপে সংযোগ করতে সক্ষম নন, আমি এই টিসিপি: //host.docker.internal: 2375 ব্যবহার করেছি এবং 'লোকালহোস্ট: 2375' তে এক্সপোস ডেমন সক্ষম করেছি এবং এটি কাজ করে। অনেক সময় সাশ্রয় ধন্যবাদ!
বিকাশ

84

আপডেট: ম্যাকের জন্য ডকারে , 18.03 সংস্করণ অনুসারে, আপনি হোস্টের আইপি হিসাবে host.docker.intern ব্যবহার করতে পারেন । দেখুন allanberry এর উত্তর । ম্যাকের জন্য ডকারের পূর্ববর্তী সংস্করণগুলির জন্য নিম্নলিখিত উত্তরগুলি এখনও কার্যকর হতে পারে:

ম্যাকের জন্য ডকারে docker0ব্রিজটি বিদ্যমান নেই, সুতরাং এখানে অন্যান্য উত্তরগুলি কাজ না করে। যাইহোক সমস্ত বহির্গামী ট্র্যাফিক আপনার প্যারেন্ট হোস্টের মাধ্যমে চালিত হয়, আপনি যতক্ষণ না কোনও আইপিতে সংযোগ দেওয়ার চেষ্টা করেন ততক্ষণ এটি নিজের হিসাবে স্বীকৃত হয় (এবং ডকারের ধারকটি নিজেই এটি মনে করেন না) আপনার সংযোগ করতে সক্ষম হওয়া উচিত। উদাহরণস্বরূপ, যদি আপনি এটি প্যারেন্ট মেশিন রান থেকে চালান:

ipconfig getifaddr en0

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

sudo ifconfig lo0 alias 192.168.46.49

তারপরে আপনি টেলনেট দিয়ে ডকারের ধারকটির মধ্যে থেকে সংযোগটি পরীক্ষা করতে পারেন। আমার ক্ষেত্রে আমি একটি রিমোট xdebug সার্ভারের সাথে সংযোগ করতে চেয়েছিলাম:

telnet 192.168.46.49 9000

এখন যখন ট্র্যাফিক আপনার ম্যাকের সাথে 192.168.46.49 ঠিকানায় আসে (এবং আপনার ধারক ছেড়ে যাওয়া সমস্ত ট্র্যাফিক আপনার ম্যাকের মধ্য দিয়ে যায়) আপনার ম্যাক ধরে নিবে যে আইপি নিজেই। আপনি যখন এই আইপিটি ব্যবহার শেষ করেন, আপনি এই জাতীয় লুপব্যাকের নামটি মুছতে পারেন:

sudo ifconfig lo0 -alias 192.168.46.49

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

sudo ip addr show lo

আমার ক্ষেত্রে, এটি দেখিয়েছে inet 127.0.0.1/8যার অর্থ আমি 127.*সীমার কোনও আইপি ব্যবহার করতে পারি না । এজন্য আমি 192.168.*উপরের উদাহরণটিতে ব্যবহার করেছি । নিশ্চিত করুন যে আপনি যে আইপি ব্যবহার করেছেন তা আপনার নিজের নেটওয়ার্কের কোনও কিছুর সাথে বিরোধী নয়।


কোনও সিস্টেম পুনরায় চালু হওয়ার পরে কি এই লুপ ব্যাক সেটিংসটি পরিষ্কার করবে?
রব্বো_উকে

@ রব্বো_উইকে হ্যাঁ, আপনি আপনার ম্যাকটি পুনরায় চালু করার পরে লুপব্যাক ওরফে চলে যাবে।
কোড কমান্ডার

1
লিনাক্সের জন্য ডকারের অধীনে কাজ করে না বলে এই হোস্টনামটির ব্যবহারের কোনও অর্থ নেই। তারা কেন এটি লিনাক্সের জন্য যুক্ত করেনি?
TheFox

তারা এই মুহুর্তে এটি অনুসন্ধান করছে @ দ্য ফক্স: github.com/docker/libnetwork/pull/2348
ইভো পেরেইরা

46

এডাব্লুএসে ডকার চালিতদের জন্য, হোস্টের জন্য উদাহরণ মেটা-ডেটা এখনও ধারকটির ভিতরে থেকেই পাওয়া যায়।

curl http://169.254.169.254/latest/meta-data/local-ipv4

উদাহরণ স্বরূপ:

$ docker run alpine /bin/sh -c "apk update ; apk add curl ; curl -s http://169.254.169.254/latest/meta-data/local-ipv4 ; echo"
fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/community/x86_64/APKINDEX.tar.gz
v3.3.1-119-gb247c0a [http://dl-cdn.alpinelinux.org/alpine/v3.3/main]
v3.3.1-59-g48b0368 [http://dl-cdn.alpinelinux.org/alpine/v3.3/community]
OK: 5855 distinct packages available
(1/4) Installing openssl (1.0.2g-r0)
(2/4) Installing ca-certificates (20160104-r2)
(3/4) Installing libssh2 (1.6.0-r1)
(4/4) Installing curl (7.47.0-r0)
Executing busybox-1.24.1-r7.trigger
Executing ca-certificates-20160104-r2.trigger
OK: 7 MiB in 15 packages
172.31.27.238

$ ifconfig eth0 | grep -oP 'inet addr:\K\S+'
172.31.27.238

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

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

ফিউশন বেসিমেজে (উবুন্টুর উপর ভিত্তি করে), আমাকে আপনার আদেশটি কিছুটা পরিবর্তন করতে হয়েছিল:ifconfig eth0 | grep -oP 'inet \K\S+'
মইওই

25

আপনি একটি ধারক তৈরি করার সময় হোস্টের তথ্যটিকে পরিবেশ হিসাবে একমাত্র উপায়টি হ'ল

run --env <key>=<value>

19
আরও সুনির্দিষ্টভাবে, ব্রিজের আইপি ঠিকানাটি একটি কমান্ড লাইন বিকল্প ব্যবহার করে পাস করা যেতে পারে যেমন: -e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')"( ইউনিক্স.স্ট্যাকেক্সেঞ্জা.কম
সেকশনস

7
আমি মনে করি এটি ম্যাক / উইন্ডোজের জন্য ডকারে কাজ করে না। (ব্রিজ আইপি)
zx1986

22

--add-hostআরো ক্লিনার সমাধান হতে পারে (কিন্তু বন্দর অংশ ছাড়া, শুধুমাত্র হোস্ট আপনাকে এই সমাধান সঙ্গে পরিচালনা করা যেতে পারে)। সুতরাং, আপনার docker runআদেশে, এর মতো কিছু করুন:

docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print  $3}'` [my container]

( Https://stackoverflow.com/a/26864854/127400 থেকে )


আমি যখন বলেছিলাম "এর জন্য তৈরি" যখন অন্য কেউ / ইত্যাদি / হোস্টগুলিতে প্রবেশ করতে চান; এই প্রশ্নে এটি সত্য নয়। এছাড়াও ওপি "হোস্ট এবং পোর্টম্যাপস" চেয়েছিল এবং আপনি কেবল হোস্টটি আবরণ করেছেন।
ব্রায়ান

ঠিক আছে. আমি কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম কারণ গৃহীত সমাধানটি কেবল হোস্ট অংশটিও coversেকে দেয়। এবং আমি মনে করি আপনার সমাধানটি স্পিনাসের একটির চেয়ে সেরা।
অগুনারিক

আপনি ডিন্ড - ডকার-ইন-ডকার ব্যবহার করতে চাইলে এটি কাজ করে না। ইনার ডকারের বিভিন্ন আইপি থাকবে
শোরগোল

12

এটি স্বয়ংক্রিয়ভাবে করতে সন্ধানকারী বেশিরভাগ অ্যাপ্লিকেশানের জন্য আদর্শ সেরা অনুশীলন: আপনি তা করবেন না । পরিবর্তে আপনার কাছে ধারকটি চালিত ব্যক্তিটি কনফিগারেশন হিসাবে বাহ্যিক হোস্টনাম / আইপি ঠিকানা ইনজেক্ট করুন, যেমন একটি পরিবেশগত পরিবর্তনশীল বা কনফিগারেশন ফাইল হিসাবে। ব্যবহারকারীকে এটি ইনজেক্ট করতে দেওয়া আপনাকে সর্বাধিক পোর্টেবল ডিজাইন দেয়।

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


আপনার নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে বিভিন্ন বিকল্প রয়েছে:

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

ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'

একটি ধারকটিতে হোস্ট নেটওয়ার্কিংয়ের সাথে এটির উদাহরণ দেখানো হচ্ছে:

docker run --rm --net host busybox /bin/sh -c \
  "ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'"

ডকার ডেস্কটপের কয়েকটি সংস্করণের জন্য তারা এম্বেড করা ভিএম-তে একটি ডিএনএস এন্ট্রি ইনজেকশন দিয়েছে:

getent hosts host.docker.internal | awk '{print $1}'

আপনি যদি কোনও মেঘের পরিবেশে চলছেন তবে আপনি মেঘ সরবরাহকারীর থেকে মেটাডেটা পরিষেবাটি পরীক্ষা করতে পারেন, যেমন এডাব্লুএস একটি:

curl http://169.254.169.254/latest/meta-data/local-ipv4

আপনি যদি আপনার বাহ্যিক / ইন্টারনেট ঠিকানা চান তবে আপনি একটি রিমোট পরিষেবাদির মতো জিজ্ঞাসা করতে পারেন:

curl ifconfig.co

এর প্রত্যেকটির সীমাবদ্ধতা রয়েছে এবং কেবল নির্দিষ্ট পরিস্থিতিতে কাজ করে। সবচেয়ে পোর্টেবল বিকল্পটি আপনার কনটেইনারটি কনফিগারেশন হিসাবে ইনজেকশন করা আইপি ঠিকানার সাহায্যে চালানো হয়, যেমন এখানে ipহোস্টে পূর্ববর্তী কমান্ডটি চালানো এবং এটি পরিবেশের পরিবর্তনশীল হিসাবে ইনজেকশনের একটি বিকল্প রয়েছে :

export HOST_IP=$(ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p')
docker run --rm -e HOST_IP busybox printenv HOST_IP

সত্যই সহায়ক curl ifconfig.coকমান্ড .. ধন্যবাদ :)
ম্যাডআউটআউটপ্রোগ্র্যামিং

8

আপনি যদি আসল IPঠিকানা চান (সেতু নয় IP) Windowsএবং আপনার কাছে ডকার রয়েছে 18.03(বা আরও সাম্প্রতিক) নিম্নলিখিতটি করুন:

হোস্ট থেকে ইমেজের নাম যেখানে রয়েছে তেমন ধারকটিতে ব্যাশ চালান nginx(কাজ করে Alpine Linux distribution):

 docker run -it nginx /bin/ash

তারপরে পাত্রে ভিতরে চালান

/ # nslookup host.docker.internal

Name:      host.docker.internal
Address 1: 192.168.65.2

192.168.65.2হোস্টের আইপি - spinusস্বীকৃত উত্তরের মতো ব্রিজ আইপি নয় ।

আমি এখানে হোস্ট.ডোকার.ইনটার্নালটি ব্যবহার করছি :

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


2
আমি আপনাকে সমাধান দেওয়ার চেষ্টা করেছি এবং দেখে মনে হচ্ছে nslookup কমান্ডটি পাওয়া যাবে না
সের্গেই

@ সার্জি আপনার চিত্রটি কি ভিত্তি করে Alpine Linux? যদি না হয় তবে আপনার নির্দিষ্টটির জন্য সমতুল্য চেক করুন linux distribution
কামিল উইটকোভস্কি

না আমি আপনার আদেশটি হুবহু ব্যবহার করছি - ডকার রান -it এনজিনেক্স / বিন / অ্যাশ
সের্গেই

ঠিক আছে - আপনি যদি উইন্ডোতে থাকেন তবে আমি স্যুইচ করেছি linux containersএবং আমি ব্যবহার করছি না windows containersYou আপনি ডান ক্লিক করে docker iconএবং নির্বাচন করে এটি করতে পারেন Switch to Linux containers। আমি মনে করি আপনি ইমেজ ডাউনলোড করার সময় এটি গুরুত্বপূর্ণ হতে পারে। আপনার যদি windows containerপুরানো nginxচিত্রটি মুছে ফেলা এবং আবার ডাউনলোড করার বিষয়টি পরীক্ষা করে থাকে তবে আপনি অন্য একটি ধারক পাবেন। যদি এটি এখনও আপনার পক্ষে কাজ করে না - আপনি এর nslookupমধ্যে ইনস্টল করার চেষ্টা করতে পারেন ash
কামিল উইটকোভস্কি

আপনি যদি এনস্লুআপ করতে না পারেন তবে কেবল পিং করুন। এটি সমাধান করা আইপি প্রদর্শন করবে। আমার জন্য এই উত্তরটি কাজ করে, এবং আমি কেবলমাত্র host.docker.internal
ধারকটির

7

ম্যাক এবং উইন্ডোজের জন্য টিএলডিআর

docker run -it --rm alpine nslookup host.docker.internal

... হোস্টের আইপি ঠিকানা মুদ্রণ করে ...

nslookup: can't resolve '(null)': Name does not resolve

Name:      host.docker.internal
Address 1: 192.168.65.2

বিস্তারিত

উপর ম্যাক এবং উইন্ডোজ , আপনি বিশেষ DNS নাম ব্যবহার করতে পারেন host.docker.internal

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


1
দয়া করে একাধিক প্রশ্নের একই উত্তর যুক্ত করবেন না । একবারে যথেষ্ট খ্যাতি অর্জনের পরে সেরাটির উত্তর দিন এবং বাকীটিকে সদৃশ হিসাবে চিহ্নিত করুন। যদি এটি সদৃশ না হয়, তবে পোস্টটিতে টেলর করুন প্রশ্নটি এবং পতাকা মুছে ফেলার জন্য পতাকাটি তৈরি করুন।
ভরতভ রাও

6

ম্যাকের জন্য ডকার আমি একটি ধারক থেকে হোস্টের একটি পরিষেবায় সংযোগ করতে চাই

হোস্টটির একটি পরিবর্তিত আইপি ঠিকানা রয়েছে (বা আপনার যদি কোনও নেটওয়ার্ক অ্যাক্সেস না থাকে তবে কিছুই নয়)। 18.03 এর পর থেকে আমাদের সুপারিশটি হল বিশেষ ডিএনএস নাম হোস্ট.ডোকার.ইনটার্নেলের সাথে সংযোগ স্থাপন, যা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সমাধান করে।

গেটওয়েটি গেটওয়ে.ডোকার.ইনটার্নাল হিসাবেও পৌঁছনীয়। https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds


5

আপনি যদি ডকার রিমোট এপিআই সক্ষম করে থাকেন ( উদাহরণস্বরূপ) এবং হোস্ট মেশিনের হোস্টনাম বা আইপি ঠিকানাটি জানেন তবে এটি প্রচুর পরিমাণে ব্যাশ দিয়ে করা যেতে পারে।-Htcp://0.0.0.0:4243

আমার ধারক ব্যবহারকারীর মধ্যে bashrc:

export hostIP=$(ip r | awk '/default/{print $3}')
export containerID=$(awk -F/ '/docker/{print $NF;exit;}' /proc/self/cgroup)
export proxyPort=$(
  curl -s http://$hostIP:4243/containers/$containerID/json |
  node -pe 'JSON.parse(require("fs").readFileSync("/dev/stdin").toString()).NetworkSettings.Ports["DESIRED_PORT/tcp"][0].HostPort'
)

দ্বিতীয় লাইনটি আপনার স্থানীয় /proc/self/cgroupফাইল থেকে ধারক আইডি ধরবে ।

হোস্ট মেশিনে তৃতীয় লাইন কার্ল আউট করে (ধরে নিবেন আপনি ডকারের বন্দর হিসাবে 4243 ব্যবহার করছেন) তারপরে ফিরে আসা জেএসএনকে পার্স করার জন্য নোড ব্যবহার করে DESIRED_PORT


এটি তখনই প্রযোজ্য যখন আপনি পোর্ট ফরওয়ার্ডিং ব্যবহার করবেন। প্রকৃতপক্ষে HostPortএখানে দরকারী তথ্য HostIpহতে পারে , দুর্ভাগ্যক্রমে সম্ভবত হতে পারে0.0.0.0
আর্নআট এঙ্গেলেন

4

আমার উবুন্টু 16.03 আছে। আমার জন্য

docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print  $3}'` [image]

কাজ করে না (ভুল আইপি তৈরি করা হয়েছিল)

আমার কাজের সমাধানটি হ'ল:

docker run --add-host dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [image]

3

এডাব্লুএসে যারা ডকার চালাচ্ছেন তাদের জন্য এখানে আরও একটি বিকল্প রয়েছে। এই বিকল্পটি কার্ল প্যাকেজ যুক্ত করতে apk ব্যবহার করা এড়িয়ে চলে এবং মূল্যবান 7mb স্পেস সংরক্ষণ করে। অন্তর্নির্মিত উইজেটটি ব্যবহার করুন (এককথায় ব্যস্তবক্স বাইনারি অংশ):

wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4

3

আফাইক, লিনাক্সের জন্য ডকারের ক্ষেত্রে (মান বিতরণ), হোস্টের আইপি ঠিকানা সর্বদা থাকবে 172.17.0.1

এটির ifconfigসর্বাধিক সহজ উপায় হোস্টের (ইন্টারফেস ডকার0) মাধ্যমে :

ifconfig

একটি ডকারের ভিতরে থেকে, একটি ডকারের থেকে নিম্নলিখিত আদেশটি: ip -4 route show default | cut -d" " -f3

আপনি নিম্নলিখিত কমান্ড লাইনের সাহায্যে এটি একটি ডকারে দ্রুত চালাতে পারেন:

# 1. Run an ubuntu docker
# 2. Updates dependencies (quietly)
# 3. Install ip package   (quietly)
# 4. Shows (nicely) the ip of the host
# 5. Removes the docker (thanks to `--rm` arg)
docker run -it --rm ubuntu:19.10 bash -c "apt-get update && apt-get install iproute2 -y && ip -4 route show default | cut -d' ' -f3"

আমি আসা করি এটা সাহায্য করবে.


2

লিনাক্সে আপনি চালাতে পারেন

HOST_IP=`hostname -I | awk '{print $1}'`

ম্যাকোসে আপনার হোস্ট মেশিনটি ডকার হোস্ট নয়। ডকার ভার্চুয়ালবক্সে এটির হোস্ট ওএস ইনস্টল করবে।

HOST_IP=`docker run busybox ping -c 1 docker.for.mac.localhost | awk 'FNR==2 {print $4}' | sed s'/.$//'`

1
প্রথম কোড ব্লকটি ধারক আইপি দখল করবে এবং হোস্ট আইপি নয়
অ্যারি

ম্যান্ডোক hostname -Iসতর্ক করে দিয়েছে "আউটপুট ক্রম সম্পর্কে কোনও অনুমান করা না"।
21_1919

1

উল্লিখিত ইসি 2 মেটাডেটা দৃষ্টান্তটি ব্যবহার করে কে এডাব্লুএস ইসি 2 উদাহরণগুলিতে হোস্ট চালাচ্ছে তার জন্য নোড.জেএসে এটি একটি সংক্ষিপ্ত বাস্তবায়ন is

const cp = require('child_process');
const ec2 = function (callback) {
    const URL = 'http://169.254.169.254/latest/meta-data/local-ipv4';
    // we make it silent and timeout to 1 sec
    const args = [URL, '-s', '--max-time', '1'];
    const opts = {};
    cp.execFile('curl', args, opts, (error, stdout) => {
        if (error) return callback(new Error('ec2 ip error'));
        else return callback(null, stdout);
    })
        .on('error', (error) => callback(new Error('ec2 ip error')));
}//ec2

এবং হিসাবে ব্যবহৃত

ec2(function(err, ip) {
        if(err) console.log(err)
        else console.log(ip);
    })

0

আপনি যদি কোনও পরিষেবা ফ্যাব্রিক ক্লাস্টারে উইন্ডোজ ধারক চালাচ্ছেন তবে হোস্টের আইপি ঠিকানা পরিবেশ পরিবর্তনশীলের মাধ্যমে উপলব্ধ Fabric_NodeIPOrFQDNপরিষেবা তারেক পরিবেশ পরিবর্তনশীল


0

আমি এখানে এটি কিভাবে। এই ক্ষেত্রে, এটি আমার স্থানীয় মেশিন আইপিতে বৃষ-হোস্টকে নির্দেশ করে ডকার চিত্রের মধ্যে / ইত্যাদি / হোস্টগুলিতে একটি হোস্ট এন্ট্রি যুক্ত করে:

TAURUS_HOST=`ipconfig getifaddr en0`
docker run -it --rm -e MY_ENVIRONMENT='local' --add-host "taurus-host:${TAURUS_HOST}" ...

তারপরে, ডকারের ধারক থেকে, স্ক্রিপ্টটি আমার স্থানীয় মেশিনে ডক কনটেইনার হোস্ট করার জন্য হোস্ট নাম বৃষ-হোস্ট ব্যবহার করতে পারে।


0

সম্ভবত আমি যে পাত্রে তৈরি করেছি তা https://github.com/qoomon/docker-host হিসাবেও কার্যকর

আপনি হোস্ট সিস্টেম অ্যাক্সেস করতে কেবল ধারক নেম ডিএনএস ব্যবহার করতে পারেন যেমন কার্ল http: // ডকারহোস্ট: 9200 , সুতরাং কোনও আইপি ঠিকানা নিয়ে ঝামেলা করার দরকার নেই।


0

সমাধানটি আমি ব্যবহার করি এমন একটি "সার্ভার" এর উপর ভিত্তি করে যা কোনও ডক্টর হোস্টের কোনও বহিরাগত ঠিকানা যখন কোনও HTTP অনুরোধ গ্রহণ করে তা প্রদান করে।

"সার্ভার" এ:

1) jwilder / nginx- প্রক্সি শুরু করুন

# docker run -d -p <external server port>:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

2) আইপিফাই পাত্রে শুরু করুন

# docker run -e VIRTUAL_HOST=<external server name/address> --detach --name ipify osixia/ipify-api:0.1.0

এখন যখন কোনও ধারক সার্ভারে একটি http অনুরোধ প্রেরণ করে, যেমন

# curl http://<external server name/address>:<external server port>

ডকার হোস্টের আইপি ঠিকানাটি আইপিফাই দ্বারা HTTP শিরোনাম "এক্স-ফরওয়ার্ড-ফর" এর মাধ্যমে ফিরে আসে

উদাহরণ (আইপিফাই সার্ভারের নাম "ipif.example.com" রয়েছে এবং এটি পোর্ট ৮০ এ চলে, ডকার হোস্টের আইপি রয়েছে 10.20.30.40):

# docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
# docker run -e VIRTUAL_HOST=ipify.example.com --detach --name ipify osixia/ipify-api:0.1.0

ধারকটির ভিতরে আপনি এখন কল করতে পারেন:

# curl http://ipify.example.com
10.20.30.40


-2

উবুন্টুতে, hostnameকমান্ডটি নিম্নলিখিত বিকল্পগুলির সাথে ব্যবহার করা যেতে পারে:

  • -i, --ip-address হোস্ট নামের জন্য ঠিকানা
  • -I, --all-ip-addressesহোস্টের জন্য সমস্ত ঠিকানা

উদাহরণ স্বরূপ:

$ hostname -i
172.17.0.2

ভেরিয়েবলকে নিয়োগের জন্য, নিম্নলিখিত ওয়ান-লাইনারটি ব্যবহার করা যেতে পারে:

IP=$(hostname -i)

এটি আপনাকে হোকারের নয়, ডোকার ধারকটির আইপি ঠিকানা দেবে
মারিও ক্যামো

-7

সঙ্গে https://docs.docker.com/machine/install-machine/

ক) ock ডকার-মেশিন আইপি

খ) এক বা একাধিক মেশিনের আইপি ঠিকানা পান।

  $ docker-machine ip host_name

  $ docker-machine ip host_name1 host_name2

10
এই আহরণ ভার্চুয়াল মেশিন যে Docker পাত্রে, হোস্ট আইপি যে পাত্রে চালানো রান আইপি।
স্পেন্সর উইলিয়ামস

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