নতুন ধারক তৈরি হওয়ার পরে ঠিক হোস্টের কাছ থেকে কনটেইনারটির আইপি অ্যাড্রেস পেতে আমি যে আদেশটি চালাতে পারি তা কি আছে?
মূলত, ডকার একবার ধারক তৈরি করার পরে, আমি আমার নিজের কোড স্থাপনা এবং ধারক কনফিগারেশন স্ক্রিপ্টগুলি রোল করতে চাই।
নতুন ধারক তৈরি হওয়ার পরে ঠিক হোস্টের কাছ থেকে কনটেইনারটির আইপি অ্যাড্রেস পেতে আমি যে আদেশটি চালাতে পারি তা কি আছে?
মূলত, ডকার একবার ধারক তৈরি করার পরে, আমি আমার নিজের কোড স্থাপনা এবং ধারক কনফিগারেশন স্ক্রিপ্টগুলি রোল করতে চাই।
উত্তর:
--format
বিকল্প inspect
রেসকিউ আসে।
আধুনিক ডকার ক্লায়েন্ট সিনট্যাক্সটি হ'ল:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
ওল্ড ডকার ক্লায়েন্ট সিনট্যাক্সটি হ'ল:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
এই আদেশগুলি ডকারের ধারকটির আইপি ঠিকানাটি ফিরিয়ে দেবে।
মন্তব্যে উল্লিখিত হিসাবে: আপনি উইন্ডোতে থাকলে, কোঁকড়া ধনুর্বন্ধনীগুলির চারপাশে "
একক উদ্ধৃতিগুলির পরিবর্তে ডাবল কোট ব্যবহার করুন '
।
<no value>
গুলো / Boot2Docker ব্যবহার করে একটি ম্যাক প্রতিক্রিয়া
<no value>
কোনও ধারক চালাচ্ছেন না যার বিরুদ্ধে চালানোর চেষ্টা করেন আপনি পাবেন । আপনি এটি করার আগে আপনার ধারকটি চলমান রয়েছে তা নিশ্চিত করুন।
{{ .NetworkSettings.Networks.$network.IPAddress }}
। ডিফল্টটি সেতু হিসাবে উপস্থিত বলে মনে হয়, তবে ডকার-রচনার অধীনে এটি একটি নির্দিষ্ট নাম হবে যা আপনার অ্যাপ্লিকেশনটির নামের উপর নির্ভর করে (আমি মনে করি - প্রকল্পের নাম পতাকাটি থেকে, যদিও এটি কী ধরণের নেটওয়ার্কিং কনফিগারেশনের উপর নির্ভর করে আপনি সেট আপ করেছেন)। আমি এখানে একটি উত্তরে একটি সম্পূর্ণ উত্তর লিখেছিলাম stackoverflow.com/questions/17157721/…
আপনি ব্যবহার করতে পারেন docker inspect <container id>
।
উদাহরণ স্বরূপ:
CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, এটি দুর্দান্ত কাজ করে :)
alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
নতুন বাক্য গঠন। -format
অবচয় করা হয়, হয়ে যায় --format
।
প্রথমে ধারক আইডি পান:
docker ps
(প্রথম কলামটি ধারক আইডির জন্য)
চালানোর জন্য ধারক আইডি ব্যবহার করুন:
docker inspect <container ID>
নীচে, "নেটওয়ার্কসেটিংস" এর অধীনে, আপনি "আইপিএড্রেস" খুঁজে পেতে পারেন
বা কেবল করুন:
docker inspect <container id> | grep "IPAddress"
docker run -it MYCONTAINER /bin/bash
), আউটপুটটির inspect
কোনও বিভাগ নেই NetworkSettings
!
docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
... | grep IP
আইপি পেতে প্রয়োজনীয় সমস্ত ফরম্যাটিং বিশদগুলির সমাধানটি আমি ব্যাপকভাবে পছন্দ করি । +1
docker run -it MYIMAGE
docker inspect MYIMAGE
MYIMAGE_1
docker inspect MYIMAGE_1
docker inspect CONTAINER_ID | grep "IPAddress"
-i
কেস উপেক্ষা করার জন্য আপনি গ্রেপ যুক্ত করতে পারেন তারপরেও নীচেরগুলিও কাজ করবে:
docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
কেবলমাত্র একটি একক কমান্ডে সমস্ত ধারকের নাম এবং তাদের আইপি ঠিকানাগুলি পেতে।
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
আপনি যদি docker-compose
কমান্ডটি ব্যবহার করছেন তবে এটি হ'ল:
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
আউটপুটটি হবে:
/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
{{.NetworkSettings.IPAddress }}
করতে{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'
। sed(1)
অপসারণ পাত্রে বর্তমানে খালি লাইন, কিন্তু একটি IP- ঠিকানা হচ্ছে না।
আপনার ~/.bashrc
বা প্রাসঙ্গিক ফাইলটিতে এই শেল স্ক্রিপ্টটি যুক্ত করুন:
docker-ip() {
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}
তারপরে, একটি ধারকটির আইপি ঠিকানা পেতে, কেবল এটি করুন:
docker-ip YOUR_CONTAINER_ID
ডকারের নতুন সংস্করণের জন্য, দয়া করে নিম্নলিখিতটি ব্যবহার করুন:
docker-ip() {
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
ডকার ১.৩++ এ আপনি এটি ব্যবহার করেও এটি পরীক্ষা করতে পারেন:
চলমান ডকার (লিনাক্স) লিখুন:
docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql
উইন্ডোজ জন্য:
docker exec [container-id or container-name] ipconfig
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
ডকার সংস্করণ 1.10.3 হিসাবে, 20f81dd তৈরি করুন
আপনি ডকারকে অন্যথায় না বললে ডকার সর্বদা ব্রিজের নেটওয়ার্কে আপনার ধারকগুলি চালু করে। সুতরাং আপনি নীচে এই কমান্ড চেষ্টা করতে পারেন:
docker network inspect bridge
এরপরে একটি ধারক বিভাগটি ফেরত দেওয়া উচিত যা চলমান ধারকটির আইপি ঠিকানা প্রদর্শন করবে।
[
{
"Name": "bridge",
"Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Containers": {
"025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
"Name": "drunk_leavitt",
"EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
}
}
]
এক্সিকিউট:
docker ps -a
এটি সক্রিয় ডকার চিত্রগুলি প্রদর্শন করবে:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b733ae18c1c parzee/database "/usr/lib/postgresql/" 6 minutes ago Up 6 minutes 5432/tcp serene_babbage
কনটেনার আইডি মান ব্যবহার করুন:
docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1
"172.17.0.2"
আমার পছন্দ হওয়া কয়েকটি উত্তরের ভিত্তিতে, আমি সমস্ত আইপি ঠিকানা এবং একটি নির্দিষ্ট ধারকটির জন্য অন্য একটি পেতে একটি ফাংশনে তাদের একত্রীকরণের সিদ্ধান্ত নিয়েছি। তারা এখন আমার .bashrc
ফাইলে আছে।
docker-ips() {
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}
docker-ip() {
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
প্রথম কমান্ডটি সমস্ত পাত্রে আইপি ঠিকানা এবং দ্বিতীয়টি একটি নির্দিষ্ট ধারকের আইপি ঠিকানা দেয়।
docker-ips
docker-ip YOUR_CONTAINER_ID
আমি নীচে চলমান সমস্ত ধারক থেকে আইপি ঠিকানার একটি টেবিল পেতে নিম্নলিখিত বাশ স্ক্রিপ্ট লিখেছিলাম docker-compose
।
function docker_container_names() {
docker ps -a --format "{{.Names}}" | xargs
}
# Get the IP address of a particular container
dip() {
local network
network='YOUR-NETWORK-HERE'
docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@"
}
dipall() {
for container_name in $(docker_container_names);
do
local container_ip=$(dip $container_name)
if [[ -n "$container_ip" ]]; then
echo $(dip $container_name) " $container_name"
fi
done | sort -t . -k 3,3n -k 4,4n
}
আপনার নিজের নেটওয়ার্কের নামে পরিবর্তনশীল নেটওয়ার্কটি পরিবর্তন করা উচিত।
এখানে দ্রুত কাজের উত্তর দেওয়া হল:
আপনার ধারকটির নাম বা আইডি পান:
docker container ls
তারপরে আইপি নিন:
docker inspect <container_ID Or container_name> |grep 'IPAddress'
বন্দরটি পান:
docker inspect <container_ID Or container_name> |grep 'Port'
ডকার গোতে লেখা এবং এটি কোয়েরি উদ্দেশ্যেও গো সিনট্যাক্স ব্যবহার করে।
কোনও নির্দিষ্ট ধারকের আইপি ঠিকানাটি পরীক্ষা করার জন্য আপনাকে কমান্ডটি চালাতে হবে ( -f
"ফর্ম্যাট" এর জন্য):
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name
ধারক আইডি বা নামের জন্য আপনি কমান্ডটি চালাতে পারেন
docker container ls
যা প্রতিটি চলমান ধারককে তালিকাভুক্ত করবে।
আজ পাইথনে আমি docker inspect container
JSON আউটপুটটিকে ডেটা উত্স হিসাবে ব্যবহার করে একটি সমাধান প্রস্তুত করেছি ।
আমার কাছে প্রচুর কনটেইনার এবং অবকাঠামো রয়েছে যা আমাকে পরিদর্শন করতে হবে এবং দ্রুত এবং সুন্দর পদ্ধতিতে আমার যে কোনও ধারক থেকে বেসিক নেটওয়ার্কের তথ্য নেওয়া দরকার । এই জন্যই আমি এই স্ক্রিপ্টটি তৈরি করেছি।
গুরুত্বপূর্ণ: সংস্করণ ১.৯ থেকে, ডকার আপনাকে একাধিক নেটওয়ার্ক তৈরি করতে এবং সেগুলি পাত্রে সংযুক্ত করার অনুমতি দেয়।
#!/usr/bin/python
import json
import subprocess
import sys
try:
CONTAINER = sys.argv[1]
except Exception as e:
print "\n\tSpecify the container name, please."
print "\t\tEx.: script.py my_container\n"
sys.exit(1)
# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out = proc.stdout.read()
json_data = json.loads(out)[0]
net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
net_dict['mac_addr'] = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
net_dict['ipv4_net'] = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
net_dict['ipv4_gtw'] = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
net_dict['ipv6_net'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
net_dict['ipv6_gtw'] = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
for item in net_dict:
if net_dict[item] == "" or net_dict[item] == 0:
net_dict[item] = "null"
print "\n[%s]" % network
print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
print "--------------------------------------------"
print "IPv4 settings:{:>16}/{:<5} {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
print "IPv6 settings:{:>16}/{:<5} {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])
আউটপুটটি হ'ল:
$ python docker_netinfo.py debian1
[frontend]
02:42:ac:12:00:02 IP/NETWORK GATEWAY
--------------------------------------------
IPv4 settings: 172.18.0.2/16 172.18.0.1
IPv6 settings: null/null null
[backend]
02:42:ac:13:00:02 IP/NETWORK GATEWAY
--------------------------------------------
IPv4 settings: 172.19.0.2/16 172.19.0.1
IPv6 settings: null/null null
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>
উপরের কাজগুলি যদি কনটেইনারটি ডিফল্ট ব্রিজ নেটওয়ার্কে স্থাপন করা হয়।
তবে, যদি কাস্টম ব্রিজ নেটওয়ার্ক বা ওভারলে নেটওয়ার্ক ব্যবহার করা হয়, তবে আরও ভাল কাজ করতে আমি নীচেরটি পেয়েছি:
docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
কো-ডসের উত্তর প্রসারিত করতে, সমস্ত ধারকের নাম এবং তাদের আইপি ঠিকানাগুলি তালিকাবদ্ধ করার জন্য এখানে একটি উপাধি রয়েছে:
alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'
docker ps -q
এড়াতে tail
, এবং --format
, grep এড়ানো। এছাড়াও আপনি docker inspect
শেল লুপের পরিবর্তে একাধিক ধারক আইডি পাস করতে পারেন ।
docker ps -q
কেবলমাত্র ধারকগুলির সংখ্যাসূচক আইডি প্রদর্শন করে তবে আমি মনে করি যে তাদের নাম ব্যবহার করা আরও ভাল। tail
এটি কেবল প্রথম লাইন (টেবিল শিরোনাম) থেকে মুক্তি পাওয়ার জন্য এবং এখনও প্রয়োজন। আমি ব্যবহার করতে পারে --format
যদিও: docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
। তবে এটি কোনও বড় উন্নতির মতো বলে মনে হচ্ছে না ... এটি grep
ছিল আরও পাঠযোগ্য আইএমও।
docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
যদি আপনি ডকার টুলবক্স ব্যবহার করে ডকার ইনস্টল করেন তবে আপনি ধারক আইপি ঠিকানা পেতে কাইটেম্যাটিক অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন:
docker inspect
আপনি ডকার টুলবক্স চালানোর সময় কার্যকর হয় না। এটি একটি আইপি ঠিকানার প্রতিবেদন করবে, তবে এটি আপনার পরিষেবাগুলি ব্যবহার করবে এমন সঠিক ঠিকানা নয়।
বিঃদ্রঃ!!! ডকার রচনা ব্যবহারের জন্য:
যেহেতু ডকার কম্পোজ প্রতিটি ক্লাস্টারের জন্য একটি বিচ্ছিন্ন নেটওয়ার্ক তৈরি করে, নীচের পদ্ধতিগুলি কাজ করে না docker-compose
।
সর্বাধিক মার্জিত এবং সহজ উপায় শেল ফাংশনটি সংজ্ঞায়িত করা হচ্ছে, বর্তমানে সর্বাধিক ভোট প্রাপ্ত উত্তর @ ওয়াউটারডি এর :
dockip() {
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}
ডকার লিনাক্স প্রোগ্রামের মতো কোনও ফাইলে ধারক আইডি লিখতে পারে:
সাথে চলমান --cidfile=filename
, ডকার কনটেইনারটির আইডিটি "ফাইলের নাম" থেকে ফেলে দেয়।
আরও তথ্যের জন্য " ডকার পিআইডি সমতুল্য বিভাগ চালায় " দেখুন ।
--cidfile="app.cid": Write the container ID to the file
একটি পিআইডি ফাইল ব্যবহার করা:
--cidfile
প্যারামিটার সহ ধারক চালানো , app.cid
ফাইলের সামগ্রীটি হ'ল:
a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
আপনি ডকার পাত্রে পরিদর্শন করতে ফাইল সামগ্রী ব্যবহার করতে পারেন:
blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
আপনি একটি ইনলাইন পাইথন স্ক্রিপ্ট ব্যবহার করে ধারক আইপি বের করতে পারেন:
$ docker inspect `cat app.cid` | python -c "import json;import sys;\
sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])"
172.17.0.2
এখানে একটি আরও মানব বান্ধব ফর্ম:
#!/usr/bin/env python
# Coding: utf-8
# Save this file like get-docker-ip.py in a folder that in $PATH
# Run it with
# $ docker inspect <CONTAINER ID> | get-docker-ip.py
import json
import sys
sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])
আরও তথ্যের জন্য " ডকারের ধারক আইপি ঠিকানাগুলি পাওয়ার 10 বিকল্প " দেখুন ।
উইন্ডোজ 10 এর জন্য:
docker inspect --format "{{ .NetworkSettings.IPAddress }}" containerId
এটি হোস্টের সমস্ত ধারক আইপি তালিকাভুক্ত করবে:
sudo docker ps -aq | while read line; do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
ডকার সমস্ত ধারক আইপি এবং তার সম্পর্কিত নামগুলি মুদ্রণের জন্য ব্যবহারটি পরীক্ষা করে
docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
কেবল সম্পূর্ণতার জন্য:
আমি --format
বিকল্পটি পছন্দ করি তবে প্রথমে আমি এটি সম্পর্কে অবগত ছিলাম না তাই একই ফলাফল পেতে আমি একটি সাধারণ পাইথন ওয়ান-লাইনার ব্যবহার করেছি:
docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
ব্যবহার করুন:
docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
জন্য উইন্ডোজ পাত্রে ব্যবহার
docker exec <container> ipconfig
যেখানে <container>
হয় নাম বা আইডি ধারক করুন।
আপনি docker ps
ধারকটির আইডি খুঁজতে ব্যবহার করতে পারেন ।
আপনি যদি ধারক আইডি ভুলে গেছেন বা শেল কমান্ডগুলি নিয়ে কারসাজি করতে না চান, পোর্টেনারের মতো ইউআই ব্যবহার করা ভাল।
$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
আপনি ধারক এছাড়াও আইপি সম্পর্কে সমস্ত তথ্য পেতে পারেন।