যেমন শিরোনাম বলেছেন। আমার হোস্ট থেকে কনটেইনার পর্যন্ত আইপি ঠিকানা ডকার হোস্ট এবং পোর্টম্যাপগুলি পুনরুদ্ধার করতে এবং পাত্রে এটি করতে সক্ষম হতে হবে।
যেমন শিরোনাম বলেছেন। আমার হোস্ট থেকে কনটেইনার পর্যন্ত আইপি ঠিকানা ডকার হোস্ট এবং পোর্টম্যাপগুলি পুনরুদ্ধার করতে এবং পাত্রে এটি করতে সক্ষম হতে হবে।
উত্তর:
/sbin/ip route|awk '/default/ { print $3 }'
যেমনটি @ মিশেলনিলে লক্ষ্য করেছেন, এই পদ্ধতিটি ব্যবহার করার কোনও বুদ্ধি নেই Dockerfile
(কেবলমাত্র যখন বিল্ডিংয়ের সময় আমাদের এই আইপিটির প্রয়োজন হয় তা বাদে), কারণ এই আইপিটি বিল্ড টাইমের সময় হার্ডকোডযুক্ত থাকবে।
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
docker.for.mac..
অকেজো কারণ যেহেতু বেশিরভাগ ক্ষেত্রে আপনার কাছে আপনার কোম্পানিতে লিনাক্স বা ম্যাক-কেবল পরিবেশ নেই। এটি মিশ্রিত, আপনার লিনাক্স এবং ম্যাক এবং উইন্ডোজ ব্যবহার করে ডেভ রয়েছে। 99% এর মধ্যে এটি একটি মিশ্র হোস্ট ওএস পরিবেশের কারণে এই ডোমেনটির কোনও ধারণা নেই। আমি ম্যাকস এর অধীনে একটি ধারক বিকাশ করি না এবং এটি একটি ম্যাকোএস সার্ভারে স্থাপন করি। আমি এটি লিনাক্সে স্থাপন করি। সবাই এটাই করে। সুতরাং এমনকি পুরো পয়েন্ট কি docker.for.mac..
?
docker.for.mac.host.internal
আপনি ডকারটি ব্যবহার করছেন বা ব্যবহার করছেন কিনা তা বিবেচ্য নয় docker-compose
। আমি কনফিগারেশন ফাইলগুলিতে একটি নির্দিষ্ট হোস্ট ব্যবহার করতে চাই। আইডিকে, উদাহরণস্বরূপ, docker.host.internal
যা সর্বদা হোস্ট আইপি ঠিকানার দিকে নির্দেশ করে। আমি যে হোস্ট সিস্টেমটি ব্যবহার করি না কেন। এটি ডকারকে একেবারে ব্যবহার করার পুরো বিষয়টি: আমি স্বায়ত্তশাসিত হতে চাই। আমি বুঝতে পারি যে এটি ম্যাকওএসে আরও কৌশলযুক্ত কারণ আপনার হোস্ট সিস্টেম এবং ধারকটির মধ্যে অন্য একটি স্তর রয়েছে। তবে যাইহোক, আমার মতে docker.for.mac.host.internal
এটি অকার্যকর যদি আপনি কেবল এটি ম্যাকওএসের জন্য ব্যবহার করতে পারেন।
আপডেট: ম্যাকের জন্য ডকারে , 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.*
উপরের উদাহরণটিতে ব্যবহার করেছি । নিশ্চিত করুন যে আপনি যে আইপি ব্যবহার করেছেন তা আপনার নিজের নেটওয়ার্কের কোনও কিছুর সাথে বিরোধী নয়।
এডাব্লুএসে ডকার চালিতদের জন্য, হোস্টের জন্য উদাহরণ মেটা-ডেটা এখনও ধারকটির ভিতরে থেকেই পাওয়া যায়।
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+'
আপনি একটি ধারক তৈরি করার সময় হোস্টের তথ্যটিকে পরিবেশ হিসাবে একমাত্র উপায়টি হ'ল
run --env <key>=<value>
-e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')"
( ইউনিক্স.স্ট্যাকেক্সেঞ্জা.কম
--add-host
আরো ক্লিনার সমাধান হতে পারে (কিন্তু বন্দর অংশ ছাড়া, শুধুমাত্র হোস্ট আপনাকে এই সমাধান সঙ্গে পরিচালনা করা যেতে পারে)। সুতরাং, আপনার docker run
আদেশে, এর মতো কিছু করুন:
docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [my container]
এটি স্বয়ংক্রিয়ভাবে করতে সন্ধানকারী বেশিরভাগ অ্যাপ্লিকেশানের জন্য আদর্শ সেরা অনুশীলন: আপনি তা করবেন না । পরিবর্তে আপনার কাছে ধারকটি চালিত ব্যক্তিটি কনফিগারেশন হিসাবে বাহ্যিক হোস্টনাম / আইপি ঠিকানা ইনজেক্ট করুন, যেমন একটি পরিবেশগত পরিবর্তনশীল বা কনফিগারেশন ফাইল হিসাবে। ব্যবহারকারীকে এটি ইনজেক্ট করতে দেওয়া আপনাকে সর্বাধিক পোর্টেবল ডিজাইন দেয়।
কেন এত কঠিন হবে? কারণ পাত্রে, নকশা করে, হোস্ট পরিবেশ থেকে অ্যাপ্লিকেশনটি আলাদা করা হবে। নেটওয়ার্কটি ডিফল্টরূপে কেবল সেই ধারকটির নামই গতিযুক্ত এবং হোস্টের বিশদটি ধারকটির ভিতরে চলমান প্রক্রিয়া থেকে সুরক্ষিত থাকে যা পুরোপুরি বিশ্বাসযোগ্য নয়।
আপনার নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে বিভিন্ন বিকল্প রয়েছে:
যদি আপনার ধারকটি হোস্ট নেটওয়ার্কিংয়ের সাথে চলমান থাকে, তবে আপনি ডিফল্ট রুটটি আউট দেখতে সরাসরি হোস্টের রাউটিং টেবিলটি দেখতে পারেন। থেকে এই প্রশ্নের আমাকে যেমন জন্য নিম্নলিখিত কাজগুলো করেনঃ
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
কমান্ড .. ধন্যবাদ :)
আপনি যদি আসল 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 এর পর থেকে আমাদের সুপারিশটি হল বিশেষ ডিএনএস নাম হোস্ট.ডোকার.ইনটার্নেলের সাথে সংযোগ স্থাপন, যা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সমাধান করে। এটি বিকাশের উদ্দেশ্যে এবং উইন্ডোজের জন্য ডকারের বাইরে কোনও উত্পাদন পরিবেশে কাজ করবে না।
Alpine Linux
? যদি না হয় তবে আপনার নির্দিষ্টটির জন্য সমতুল্য চেক করুন linux distribution
।
linux containers
এবং আমি ব্যবহার করছি না windows containers
You আপনি ডান ক্লিক করে docker icon
এবং নির্বাচন করে এটি করতে পারেন Switch to Linux containers
। আমি মনে করি আপনি ইমেজ ডাউনলোড করার সময় এটি গুরুত্বপূর্ণ হতে পারে। আপনার যদি windows container
পুরানো nginx
চিত্রটি মুছে ফেলা এবং আবার ডাউনলোড করার বিষয়টি পরীক্ষা করে থাকে তবে আপনি অন্য একটি ধারক পাবেন। যদি এটি এখনও আপনার পক্ষে কাজ করে না - আপনি এর nslookup
মধ্যে ইনস্টল করার চেষ্টা করতে পারেন ash
।
host.docker.internal
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 এর পর থেকে আমাদের সুপারিশটি হল বিশেষ ডিএনএস নাম হোস্ট.ডোকার.ইনটার্নেলের সাথে সংযোগ স্থাপন, যা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সমাধান করে। এটি বিকাশের উদ্দেশ্যে এবং ম্যাকের জন্য ডকার ডেস্কটপের বাইরে কোনও উত্পাদন পরিবেশে কাজ করবে না।
ম্যাকের জন্য ডকার আমি একটি ধারক থেকে হোস্টের একটি পরিষেবায় সংযোগ করতে চাই
হোস্টটির একটি পরিবর্তিত আইপি ঠিকানা রয়েছে (বা আপনার যদি কোনও নেটওয়ার্ক অ্যাক্সেস না থাকে তবে কিছুই নয়)। 18.03 এর পর থেকে আমাদের সুপারিশটি হল বিশেষ ডিএনএস নাম হোস্ট.ডোকার.ইনটার্নেলের সাথে সংযোগ স্থাপন, যা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সমাধান করে।
গেটওয়েটি গেটওয়ে.ডোকার.ইনটার্নাল হিসাবেও পৌঁছনীয়। https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
আপনি যদি ডকার রিমোট এপিআই সক্ষম করে থাকেন ( উদাহরণস্বরূপ) এবং হোস্ট মেশিনের হোস্টনাম বা আইপি ঠিকানাটি জানেন তবে এটি প্রচুর পরিমাণে ব্যাশ দিয়ে করা যেতে পারে।-H
tcp://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
আমার উবুন্টু 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]
এডাব্লুএসে যারা ডকার চালাচ্ছেন তাদের জন্য এখানে আরও একটি বিকল্প রয়েছে। এই বিকল্পটি কার্ল প্যাকেজ যুক্ত করতে apk ব্যবহার করা এড়িয়ে চলে এবং মূল্যবান 7mb স্পেস সংরক্ষণ করে। অন্তর্নির্মিত উইজেটটি ব্যবহার করুন (এককথায় ব্যস্তবক্স বাইনারি অংশ):
wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4
আফাইক, লিনাক্সের জন্য ডকারের ক্ষেত্রে (মান বিতরণ), হোস্টের আইপি ঠিকানা সর্বদা থাকবে 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"
আমি আসা করি এটা সাহায্য করবে.
লিনাক্সে আপনি চালাতে পারেন
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'/.$//'`
hostname -I
সতর্ক করে দিয়েছে "আউটপুট ক্রম সম্পর্কে কোনও অনুমান করা না"।
উল্লিখিত ইসি 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);
})
আপনি যদি কোনও পরিষেবা ফ্যাব্রিক ক্লাস্টারে উইন্ডোজ ধারক চালাচ্ছেন তবে হোস্টের আইপি ঠিকানা পরিবেশ পরিবর্তনশীলের মাধ্যমে উপলব্ধ Fabric_NodeIPOrFQDN
। পরিষেবা তারেক পরিবেশ পরিবর্তনশীল
আমি এখানে এটি কিভাবে। এই ক্ষেত্রে, এটি আমার স্থানীয় মেশিন আইপিতে বৃষ-হোস্টকে নির্দেশ করে ডকার চিত্রের মধ্যে / ইত্যাদি / হোস্টগুলিতে একটি হোস্ট এন্ট্রি যুক্ত করে:
TAURUS_HOST=`ipconfig getifaddr en0`
docker run -it --rm -e MY_ENVIRONMENT='local' --add-host "taurus-host:${TAURUS_HOST}" ...
তারপরে, ডকারের ধারক থেকে, স্ক্রিপ্টটি আমার স্থানীয় মেশিনে ডক কনটেইনার হোস্ট করার জন্য হোস্ট নাম বৃষ-হোস্ট ব্যবহার করতে পারে।
সম্ভবত আমি যে পাত্রে তৈরি করেছি তা https://github.com/qoomon/docker-host হিসাবেও কার্যকর
আপনি হোস্ট সিস্টেম অ্যাক্সেস করতে কেবল ধারক নেম ডিএনএস ব্যবহার করতে পারেন যেমন কার্ল http: // ডকারহোস্ট: 9200 , সুতরাং কোনও আইপি ঠিকানা নিয়ে ঝামেলা করার দরকার নেই।
সমাধানটি আমি ব্যবহার করি এমন একটি "সার্ভার" এর উপর ভিত্তি করে যা কোনও ডক্টর হোস্টের কোনও বহিরাগত ঠিকানা যখন কোনও 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
এটা চেষ্টা কর
ডকার রান --rm -i --net = হোস্ট আলপাইন ifconfig
উবুন্টুতে, hostname
কমান্ডটি নিম্নলিখিত বিকল্পগুলির সাথে ব্যবহার করা যেতে পারে:
-i
, --ip-address
হোস্ট নামের জন্য ঠিকানা-I
, --all-ip-addresses
হোস্টের জন্য সমস্ত ঠিকানাউদাহরণ স্বরূপ:
$ hostname -i
172.17.0.2
ভেরিয়েবলকে নিয়োগের জন্য, নিম্নলিখিত ওয়ান-লাইনারটি ব্যবহার করা যেতে পারে:
IP=$(hostname -i)
সঙ্গে https://docs.docker.com/machine/install-machine/
ক) ock ডকার-মেশিন আইপি
খ) এক বা একাধিক মেশিনের আইপি ঠিকানা পান।
$ docker-machine ip host_name
$ docker-machine ip host_name1 host_name2