پرش به مطلب اصلی

بررسی و نمایش اطلاعات کانتینر

دستور 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