🐳 نحوه یافتن آدرس IP ظرف Docker |

آیا می خواهید آدرس IP کانتینر در حال اجرا خود را بدانید؟

برای دریافت این اطلاعات می توانید یک کانتینر در حال اجرا را بررسی کنید.

 sudo docker container inspect container_name_or_ID 

دستور inspect جزئیات زیادی در مورد ظرف در حال بازرسی است. 19659002] به پایین خروجی بروید و در بخش شبکه ها جستجو کنید تا آدرس IP ظرف را دریافت کنید.

همچنین می توانید از دستور grep برای چاپ فقط خطوطی که با الگوی "IPAddress" مطابقت دارند استفاده کنید. "

آیا نام یا شناسه ظرف را نمی دانید؟ از sudo docker ps استفاده کنید.

اگر ظرف شما بیش از یک آدرس IP دارد ، نگران نشوید.

این غیر معمول نیست.

برای درک این موضوع ، باید نحوه تعامل ظروف با یکدیگر را بفهمید. [19659002] من این را در بخش بعدی برای شما توضیح خواهم داد ، و سپس در مورد برخی دیگر از روشهای به دست آوردن آدرس IP یک ظرف داکر در حال اجرا صحبت خواهم کرد.

ظروف داکر چگونه ارتباط برقرار می کنند؟

داکر ابزاری برای بسته بندی و حمل و نقل نرم افزار با استفاده از فناوری کانتینر سازی است.

این نرم افزار می تواند اهداف مختلفی داشته باشد ، از جمله پردازش کلمات ساده گرفته تا وب سروری کامل که میزبان پرونده های شماست. بسته بندی شده در ظروف.

بسته به هدف نرم افزار ، ممکن است یک سرویس نیاز به تعامل با سرویس دیگر داشته باشد.

به عنوان مثال ، وردپرس را در نظر بگیرید.

دو سرویس وجود دارد: یکی وب سرور ، frontend ، و دیگری backend ، پایگاه داده.

رابط کاربری باید با پایگاه داده ارتباط برقرار کند یا اینکه به سادگی کار نخواهد کرد.

این ارتباط با داشتن حداقل دو شبکه حاصل می شود رابط ها ، متصل به هر یک از این دو ظرف ، هر دو رابط متصل به یک شبکه هستند.

این شبکه "شبکه docker" نامیده می شود.

شبکه Docker

شبکه Docker را به عنوان مجموعه آدرس های IP موجود بخوانید.

اگر دو کانتینر از یک آدرس IP آدرس دریافت کنند ، می توانند با یکدیگر ارتباط برقرار کنند.

در اصل دو نوع شبکه وجود دارد: شبکه های پیش فرض یا شبکه های از پیش تعریف شده و تعریف شده توسط کاربر.

می توانید لیستی دریافت کنید. شبکه ها با استفاده از دستور زیر:

  docker network ls
دامنه شناسه NETWORK NAME
03451ee164fe پل پل محلی
047550573b63 میزبان محلی است
cec416104436 هیچ محلی خالی است

دو ورودی آخر را نادیده بگیرید و روی شبکه اول تمرکز کنید.

شبکه پل شبکه پیش فرضی است که هر کانتینر به آن متصل می شود مگر اینکه صریحاً مشخص شده باشد.

با اجرای docker می توانید اطلاعات بیشتری در مورد این شبکه بدست آورید network inspect Bridge.

من قصد دارم خروجی را فیلتر کنم زیرا من به تمام داده هایی که می توانیم برای این نسخه آزمایشی تولید کنیم نیازی ندارم.

 ock docker network inspect -f '{{json .IPAM.Config}} 'پل | jq -r. []. زیرشبکه
172.17.0.0/16 

اگر jq را نصب نکرده اید ، آن را با استفاده از مدیر بسته توزیع خود نصب کنید.

هر یک از این شبکه ها دارای یک زیر شبکه است ، در مورد شبکه پل 172.17.0.0/16 است. این بدان معناست که در کل 65534 – 1 = 65533 میزبان یا IP در حال استفاده است.

من من یک از 172.17.0.1 برای دروازه اختصاص داده شده است.

همچنین می توانید این را با استفاده از دستور زیر مشاهده کنید:

 docker network inspect -f '{{json .IPAM.Config}}' Bridge | jq -r. []. دروازه

بررسی آدرس IP ظرف Docker

روش های مختلفی برای بررسی آدرس IP [а] مرتبط با کانتینر شما وجود دارد ، در اینجا لیستی شامل دستورات نمونه وجود دارد.

روش 1: بازرسی

زیر فرمان بازرسی بسیار مفید است.

با استفاده از بازرسی کانتینر docker [CONTAINER ID] می توان ظرف را بررسی کرد | [CONTAINER NAME].

بازرسی از یک کانتینر به معنای دریافت هرچه بیشتر اطلاعات در مورد کانتینر است ، از درگاه ها ، متغیرهای محیطی گرفته تا نقاط نصب ، داده های گروه و غیره.

می توانید آدرس IP را از خروجی استخراج کنید. [19659002] اگر بازرسی را روی یک کانتینر انجام دهید ، یک سری اطلاعات JSON به دست می آورید.

به پایین بروید تا کلید NetworkSettings را پیدا کنید و به دنبال IPAddress بگردید.

این آدرس IP ظرف شماست.

دستور به صورت زیر است:

 docker run --rm - name ubuntu-ip -d ubuntu: 20.04 sleep 1d

برای به کار انداختن کانتینر از دستور sleep 1d استفاده کردم.

اکنون یک فرآیند پوسته را در داخل محفظه شروع کنید و stdin | stdout خود را مانند این ضمیمه کنید:

 docker exec -ti ubuntu-ip sh

هنگامی که در این ظرف قرار گرفتید ، ip یا ifconfig را اجرا کنید.

چیزی مانند موارد زیر را مشاهده خواهید کرد:

 ock docker exec -ti ubuntu-ip sh
# آی پی
sh: 1: ip: پیدا نشد
# ifconfig
sh: 2: ifconfig: not found 

برای کار با این دستورات ، باید بسته های مناسب را نصب کنید.

برای دریافت دستور ip ، بسته iproute2 را نصب کنید و دستور ip a را دوباره اجرا کنید.

 # apt به روز رسانی -qq
6 بسته قابل ارتقا است. برای دیدن آنها "لیست مناسب - قابل ارتقا" را اجرا کنید.
# نصب مناسب iproute2 -yqq
# ip یک
1: lo:  mtu 65536 qdisc noqueue state گروه ناشناخته پیش فرض qlen 1000
    link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 دامنه میزبان
       valid_lft برای همیشه ترجیح داد_lft برای همیشه
4: eth0 @ if5:  mtu 1500 qdisc noqueue state UP گروه پیش فرض
    link / ether 02: 42: ac: 11: 00: 02 brd ff: ff: ff: ff: ff: ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 حوزه جهانی eth0
       valid_lft Forever_lft برای همیشه 

اکنون می بینید که آدرس IP مرتبط با رابط eth0 @ if5 172.17.0.2 است.

توجه داشته باشید شبکه این کانتینر بخشی از آن است.

از آنجا که من ایجاد نکردم و ایجاد نکردم شبکه کاربری را به این کانتینر متصل کنید ، این شبکه به شبکه پل متصل بود ، بنابراین شبکه این IP 172.17.0.0 است.

این روش مطمئناً کار می کند ، اگرچه زمان بر است و بسیار زیاد نیست

روش زیر باید بسیار بهتر از این باشد.

روش 3: با بررسی خود شبکه

هر وقت کانتینر به شبکه متصل شود ، این ظرف متصل است از شبکه به همراه آدرس IP اختصاص داده شده به این کانتینرها نیز قابل مشاهده است.

از آنجا که کانتینر من به شبکه پل متصل است ، می توانم با دستور زیر شبکه را بررسی کنم:

 docker network inspect [NETWORK NAME] [NETWORK ID]

در اینجا ، به جای شناسه ، از نام ، پل

به جای پیمایش به پایین قسمت Containers ، این بار از jq برای فیلتر کردن خروجی استفاده می کنم.

 ❯ شبکه docker پل را بازرسی می کند | jq '. []. ظروف. "1c76f35ce42ca0d31cfcc79da80eadfa4f69cb82e292e249ee1bd75d83a8e4ba" .IPv4Address' -r
172.17.0.2/16 [19659004[]   در بیشتر موارد شما نمی توانید شناسه ظرف را به خاطر بسپارید ، بنابراین اگر می خواهید آدرس IP را فقط از نام ظرف بگیرید ، به دانش jq نیاز دارید (یا فقط دوباره استفاده کنید دستور زیر). 

 docker network inspect -f '{{json .Containers}}' Bridge | 
    jq '.. | اگر نوع == "شی" است و دارای ("نام") است ، سپس (. نام == "[CONTAINER NAME]") را انتخاب کنید | .ipv4Address else end خالی '-r 

نام ظرف را در تابع انتخاب قرار دهید و جادوگری را مشاهده خواهید کرد.

 ❯ docker network inspect -f' {{json .Containers}} 'پل | 
    jq '.. | اگر نوع == "شی" است و دارای ("نام") است ، سپس (. نام == "ubuntu-ip") را انتخاب کنید | .ipv4 آدرس دیگری پایان خالی است -r

172.17.0.2/16 

کدام روش را انتخاب کنید؟

اینها همه روشهایی است که می توانید با استفاده از آنها آدرس IP کانتینرهای [а] را دریافت کنید.

روش دوم اگرچه بصری است اما قابل تکرار نیست. [19659000] 19659002] در بیشتر موارد ، روش اول ساده ترین روش است و کار را به خوبی انجام می دهد.

اما ممکن است زمانی پیش بیاید که بخواهید کدام کانتینرها را به یک شبکه خاص متصل کرده و آدرس های IP را در آن شبکه دریافت کنید. [19659002] در این حالت ، معنی آن این است که شبکه را بررسی کنید و آدرس های IP را برجسته کنید.

می توانید تمام نام کانتینرها و آدرس های IP اختصاص داده شده را از این شبکه دریافت کنید:

 ❯ docker network inspect -f '{{json . ظروف}} 'پل | 
    jq '.. | اگر نوع == "شی" باشد و دارای ("نام") باشد ، سپس {(.نام): .IPv4Address} جای دیگر خالی است "

{
  "ubuntu-ip": "172.17.0.2/16"
}
{
  "ip": "172.17.0.3/16"
}