بررسی و نمایش اطلاعات کانتینر
دستور inspect برای مشاهدهی تمام جزئیات سطح پایین یک کانتینر استفاده میشود. خروجی این دستور به صورت JSON است و شامل اطلاعات کامل از وضعیت، پیکربندی، منابع سیستمی و تمام جزئیات اجرای کانتینر میباشد. این دستور برای دیباگ، مانیتورینگ و بررسی پیکربندی کانتینر بسیار مفید است.
🧩 دستور کلی
k3 container inspect [options] <containerId>
آرگومانها:
containerId: شناسهی یونیک کانتینر (میتواند ID یا نام کانتینر باشد)
⚙️ گزینهها (Options)
| گزینه کوتاه | گزینه بلند | توضیح |
|---|---|---|
-h | --help | نمایش راهنمای کامل دستور |
📊 فرمت خروجی و بخشهای اصلی
خروجی inspect به سه بخش اصلی تقسیم میشود:
1️⃣ بخش Information (اطلاعات پایهای) 🧠
| فیلد | توضیح |
|---|---|
| id | شناسهی ۱۶ کاراکتری یکتا برای هر کانتینر. |
| created | زمان ساخت کانتینر (به فرمت ISO 8601). |
| args | آرگومانهای دستور اجرایی (رشتهی متنی یا لیست). |
| image | نام ایمیجی که کانتینر بر اساس آن ساخته شده است. |
| name | نام یونیک کانتینر. |
| restartCount | تعداد دفعات ریستارت شدن کانتینر تا کنون. |
| driver | نوع درایور ذخیرهسازی (مثل overlay2). |
| platform | معماری سختافزار و سیستمعامل (مثل linux/amd64). |
| hostsPath | مسیر فایل /etc/hosts برای حل نامها. |
| resolvConfPath | مسیر فایل resolv.conf برای تنظیمات DNS. |
| logPath | مسیر فایل لاگهای کانتینر. |
| execLogPath | مسیر لاگهای اجرای دستورات داخل کانتینر. |
| mountLabel | برچسب امنیتی SELinux برای فایلهای مونت شده. |
| processLabel | برچسب امنیتی SELinux برای پردازهها. |
| appArmorProfile | پروفایل امنیتی AppArmor برای کانتینر. |
| bundlePath | مسیر فایل سیستم کانتینر (OCI bundle). |
| namespaces | لیست نیماسپیسهای ایزولهشده کانتینر. |
| capabilities | شیء دسترسیهای کرنلی با تقسیمبندی (bounding, effective, inheritable, permitted, ambient). |
| mounts | لیست مفصل مسیرهای مونتشده با destination، type، source، options. |
| networkSettings | اطلاعات شبکه شامل networks، IPv4Address، MacAddress. |
2️⃣ بخش State (وضعیت فعلی) 🖥️
| فیلد | توضیح |
|---|---|
| running | مقدار منطقی: اگر true باشد، کانتینر در حال اجرا است. |
| paused | مقدار منطقی: اگر true باشد، کانتینر در حالت توقف موقتی است. |
| restartPolicy | سیاست ریستارت کانتینر (none, always, unless-stopped, on-failure یا null). |
| restartDelay | تأخیر ریستارت به ثانیه (فیلد جدید). |
| restartWindow | بازهی زمانی برای ریستارت (به ثانیه). |
| maxAttempts | حداکثر دفعات مجاز برای ریستارت کانتینر. |
| oomKilled | مقدار منطقی: آیا کانتینر به دلیل فرط مصرف حافظه کشته شد. |
| failed | مقدار منطقی: آیا کانتینر به خطا خورده است. |
| exitCode | کد خروجی فرآیند اصلی کانتینر. |
| pid | شناسهی پردازهی اصلی کانتینر (init process). |
| error | پیام خطا اگر کانتینر ناموفق بوده باشد. |
| startedAt | زمان آخرین استارت کانتینر (به فرمت ISO 8601). |
3️⃣ بخش Config (پیکربندی) 💾
| فیلد | توضیح |
|---|---|
| hostname | نام هاست داخل کانتینر. |
| domainname | نام دومین کانتینر. |
| user | شیء شامل uid و gid (یوزری و گروپی که کانتینر با آن اجرا میشود). |
| attachStdout | اگر فعال باشد، خروجی معیار قابل اتصال است. (درحال توسعه) |
| attachStderr | اگر فعال باشد، خطاهای معیار قابل اتصال هستند. (درحال توسعه) |
| attachStdin | اگر فعال باشد، ورودی معیار قابل اتصال است. (درحال توسعه) |
| tty | اگر true باشد، یک شبیهساز ترمینال (pseudo-TTY) به کانتینر متصل شده. (درحال توسعه) |
| openStdin | اگر true باشد، ورودی کانتینر همیشه باز میماند. (درحال توسعه) |
| stdinOnce | اگر true باشد، کانتینر فقط یکبار ورودی دریافت میکند. (درحال توسعه) |
| env | لیست متغیرهای محیطی کانتینر (کلید=مقدار). |
| cmd | دستور یا برنامهای که کانتینر اجرا میکند (لیست). |
| image | نام و تگ ایمیج مورد استفاده. |
| workingDir | دایرکتوری کاری پیشفرض داخل کانتینر. |
| labels | جفتهای کلید-مقدار برای متادیتای کانتینر. (درحال توسعه) |
| stopSignal | سیگنال پیشفرض برای توقف کانتینر (مثل SIGTERM). |
| volumes | فهرست والیومهای متصلشده به کانتینر (لیست). |
📥 مثالهای کاربردی
مثال ۱: نمایش اطلاعات کامل یک کانتینر
k3 container inspect cont5
مثال ۲: نمایش اطلاعات و فیلتر کردن برای قسمت state
k3 container inspect cont5 | grep -A 10 '"state"'
مثال ۳: دریافت فقط وضعیت کانتینر (با jq)
k3 container inspect cont5 | jq '.state.status'
📋 نمونه خروجی کامل
{
"id": "dd82cfb29913ea84",
"created": "2025-11-27T09:10:16.901Z",
"args": "sleep 5 && echo 'salalm'",
"state": {
"running": true,
"paused": false,
"restartPolicy": null,
"restartDelay": "0",
"restartWindow": 0,
"maxAttempts": 100000,
"oomKilled": true,
"failed": false,
"pid": 36086,
"exitCode": "none",
"error": ""
},
"image": "alpine:latest",
"name": "14",
"restartCount": 0,
"driver": "overlay",
"platform": "linux",
"config": {
"hostname": "K3",
"domainname": "",
"user": {
"uid": 0,
"gid": 0
},
"attachStdin": false,
"attachStdout": true,
"attachStderr": true,
"tty": false,
"openStdin": false,
"stdinOnce": false,
"env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"TERM=xterm",
"HOME=/root"
],
"cmd": ["/bin/sh", "-c", "/bin/sh /ikigai.sh >> /mnt/K3/K3.log 2>&1;"],
"image": "alpine:latest",
"workingDir": "/",
"labels": {},
"stopSignal": "SIGTERM",
"volumes": []
},
"logPath": "/var/lib/k3/containers/dd82cfb29913ea84/logs/K3.log",
"execLogPath": "/var/lib/k3/containers/dd82cfb29913ea84/log.jsonl",
"appArmorProfile": "",
"hostConfig": {
"resources": {
"memory": {
"limit": 6228164608,
"reservation": 6228164608,
"swap": 6228164608,
"disableOOMKiller": false
},
"cpu": {
"shares": 1024,
"quota": 1000000,
"period": 500000,
"cpus": "0"
}
}
},
"networkSettings": {
"networks": [
{
"network": "kb0",
"IPv4Address": "192.168.100.4/24",
"MacAddress": "DE:82:CF:B2:99:13"
}
]
},
"capabilities": {
"bounding": ["CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_KILL", ...],
"effective": ["CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_KILL", ...],
"inheritable": ["CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_KILL", ...],
"permitted": ["CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_KILL", ...],
"ambient": ["CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_KILL", ...]
},
"namespaces": [
{"type": "pid"},
{"type": "ipc"},
{"type": "uts"},
{"type": "mount"},
{"type": "user"},
{"type": "network"}
],
"mounts": [
{
"destination": "/proc",
"type": "proc",
"source": "proc"
},
{
"destination": "/mnt/K3",
"type": "bind",
"source": "/var/lib/k3/containers/dd82cfb29913ea84/logs",
"options": ["rbind"]
}
],
"bundlePath": "/var/lib/k3/overlays/dd82cfb29913ea84"
}
🔍 نکات مهم
-
خروجی این دستور کامل و دقیقترین اطلاعات دربارهی کانتینر را فراهم میکند.
-
برای پردازش و فیلتر کردن خروجی JSON میتوانید از ابزارهایی مثل
jqیاgrepاستفاده کنید. -
فیلدهایی که با عبارت "(درحال توسعه)" مشخص شدهاند، هنوز در سیستم K3 پیادهسازی کامل نشده یا محدود هستند.
-
زمانهای نمایش شده به فرمت ISO 8601 هستند و میتوان آنها را برای مقایسه و تجزیه پردازش کرد.
-
اطلاعات منابع سیستمی (CPU، حافظه) از طریق بخش
hostConfigدر دسترس هستند. -
فیلدهای حذفشده:
path(دیگر در خروجی نمایش داده نمیشود)،status(از بخش state حذف شد)،stopTimeout(از بخش config حذف شد). -
بخشهای جدید:
- networkSettings: شامل اطلاعات شبکه شامل شبکههای متصل، آدرس IP و MAC.
- capabilities: اطلاعات دقیق دسترسیهای کرنلی با تقسیمبندی (bounding, effective, inheritable, permitted, ambient).
-
فیلد
restartDelayیک فیلد جدید برای مدیریت تأخیر ریستارت است. -
فیلد
userدر config اکنون یک شیء باuidوgidاست (نه رشتهی متنی). -
فیلد
argsمیتواند بهصورت رشتهی متنی یا لیست باشد (هر دو قابل قبول).
تست جامع
#!/bin/bash
echo "Starting k3 container inspect tests..."
echo "[1] Inspect contTest1 (basic container)"
sudo k3 container inspect contTest1
echo
echo "[2] Inspect and filter state information"
sudo k3 container inspect contTest1 | grep -A 15 '"state"'
echo
echo "[3] Inspect and extract only status"
sudo k3 container inspect contTest1 | grep -i 'status'
echo
echo "[4] Inspect container with full JSON output"
sudo k3 container inspect cont5 | jq '.'
echo
echo "[5] Extract specific fields using jq"
sudo k3 container inspect cont5 | jq '.state.status, .config.image'
echo
echo "All inspect tests completed."
🆘 دریافت راهنما
برای مشاهدهی راهنمای کامل این دستور در خط فرمان:
k3 container inspect -h