docker - tutorial - kubernetes




কিভাবে হোস্ট থেকে একটি ডকার কনটেইনার এর আইপি ঠিকানা পেতে? (20)

দ্রুত উত্তর (এই কাজ করে):

আপনার ধারক নাম বা আইডি পান:

sudo docker container ls

তাহলে এটা করো:

sudo docker inspect <container_ID Or container_name> |grep 'IPAddress'

একটি নতুন ধারক তৈরি হওয়ার পরে হোস্ট থেকে কন্টেইনারের আইপি ঠিকানাটি পেতে আমি কোনও কমান্ড চালাতে পারি?

মূলত, একবার ডকার কনটেইনার তৈরি করে, আমি নিজের কোড স্থাপনার এবং ধারক কনফিগারেশন স্ক্রিপ্টগুলি রোল করতে চাই।


আপনি docker inspect <container id> ব্যবহার করতে পারেন docker inspect <container id>

উদাহরণ:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID

আমি যে কয়েকটি উত্তর পছন্দ করি তার উপর ভিত্তি করে, আমি একটি নির্দিষ্ট কন্টেইনারের জন্য সমস্ত আইপি ঠিকানা এবং অন্য পেতে একটি ফাংশনে তাদের মার্জ করার সিদ্ধান্ত নিয়েছিলাম। তারা এখন আমার .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}}' "[email protected]"
}

প্রথম কমান্ডটি সমস্ত পাত্রে আইপি ঠিকানা দেয় এবং দ্বিতীয়টি একটি নির্দিষ্ট ধারকের আইপি ঠিকানা দেয়।

docker-ips
docker-ip YOUR_CONTAINER_ID

উইন্ডোজ 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 inspect conatinerId | awk '/IPAddress/ || /HostPort/'

আউটপুট:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",

এখানে একটি সমাধান যা আমি পাইথনে আজ বিকশিত করেছি, "ডকার পরিদর্শন কন্টেইনার" ব্যবহার করে JSON আউটপুটটি ডেটা উৎস হিসাবে ব্যবহার করে।

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

গুরুত্বপূর্ণ: সংস্করণ 1.9 থেকে, ডকার আপনাকে একাধিক নেটওয়ার্ক তৈরি করতে এবং কনটেইনারগুলিতে সংযুক্ত করতে দেয়।

#!/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

কো-ডস 'উত্তরটি প্রসারিত করতে, এখানে সমস্ত ধারক নাম এবং তাদের আইপি ঠিকানাগুলি তালিকাবদ্ধ করার জন্য একটি উপনাম রয়েছে:

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'

ডকার 1.3+ এ, আপনি নীচের পদক্ষেপগুলির মাধ্যমে এটি পরীক্ষা করতে পারেন:

চলমান ডকার লিখুন:

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

ডকার অভ্যন্তরে অভ্যন্তরীণভাবে তৈরি করা হয় এবং এটি অনুসন্ধানের উদ্দেশ্যেও গো সিনট্যাক্স ব্যবহার করে।

একটি বিশেষ কন্টেইনারের আইপি ঠিকানা সম্পর্কে পরিদর্শন করার জন্য আপনাকে কমান্ডটি চালানোর প্রয়োজন হয় (-ফরম্যাট বিকল্পের জন্য -f)

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name

ধারক আইডি বা নাম জন্য, আপনি কমান্ড docker container ls চালাতে পারেন। এটা প্রতিটি চলমান ধারক তালিকাভুক্ত করা হবে।


ডকার সংস্করণ 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 run ... --name pg-master

তারপর নাম দ্বারা আইপি ঠিকানা ঠিকানা দখল:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)

প্রথমে কন্টেইনার আইডি পান:

docker ps

(প্রথম কলাম ধারক আইডি জন্য)

চালানোর জন্য কন্টেইনার আইডি ব্যবহার করুন:

docker inspect <container ID>

নীচে "নেটওয়ার্ক সেটিংস" এর অধীনে আপনি "আইপি অ্যাড্রেস" খুঁজে পেতে পারেন

অথবা শুধু করবেন:

docker inspect <container id> | grep "IPAddress"

ব্যবহার করুন:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1

শুধু সম্পূর্ণতা জন্য:

আমি সত্যিই --format বিকল্পটি পছন্দ করি, কিন্তু প্রথমে আমি সেই বিকল্প সম্পর্কে সচেতন ছিলাম না তাই একই ফলাফল পেতে আমি একটি সহজ পাইথন এক-মাছ ধরার যন্ত্র ব্যবহার করি:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

শুধুমাত্র একক কমান্ডের মধ্যে সমস্ত ধারক নাম এবং তাদের আইপি ঠিকানা পেতে।

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

আপনি যদি docker-compose ব্যবহার করেন তবে কমান্ডটি 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

docker inspect CONTAINER_ID | grep "IPAddress"


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 }}" "[email protected]"
}

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-compose দিয়ে কাজ করে না।

সর্বাধিক মার্জিত এবং সহজ উপায় শেল ফাংশনটি সর্বাধিক ভোট দেওয়া উত্তর @WouterD's উত্তর হিসাবে নির্ধারণ করা @WouterD's :

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "[email protected]"
}

ডকার লিনাক্স প্রোগ্রামগুলির মতো একটি ফাইলে কন্টেইনার আইডস লিখতে পারে:

--cidfile=filename প্যারামিটারের সাথে চলমান, ডকার এই ফাইলটিতে কন্টেইনারের আইডি ডাম্প করে।

ডকার PID সমতুল্য সেকশন চালায়

--cidfile="app.cid": Write the container ID to the file

পিআইডি ফাইল ব্যবহার করে

  1. --cidfile প্যারামিটারের সাথে ধারক চালানো, app.cid ফাইলের সামগ্রী নীচের মত:

a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909

  1. আপনি ডকার কনটেইনারগুলি পরিদর্শন করতে ফাইল সামগ্রী ব্যবহার করতে পারেন:

    ➜ blog-v4 git:(develop) ✗ docker inspect `cat app.cid`

  2. কন্টেইনার আইপি ইনলাইন পাইথন স্ক্রিপ্ট নিষ্কাশন:

    $ 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'])

http://networkstatic.net/10-examples-of-how-to-get-docker-container-ip-address/

এখানে ডকার কন্টেইনার আইপি ঠিকানা পাওয়ার 10 টি বিকল্প রয়েছে।


পরিদর্শন এর --format বিকল্প উদ্ধার আসে।

আধুনিক ডকার ক্লায়েন্ট সিনট্যাক্স:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

ওল্ড ডকার ক্লায়েন্ট সিনট্যাক্স:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

যা শুধু আইপি ঠিকানা ফিরে আসবে।





docker