crun(1) General Commands Manual crun(1)

crun - زمان اجرای OCI سریع و سبک

crun [گزینه‌های عمومی] command [گزینه‌های دستور] [آرگومان‌ها...]

دستور crun یک برنامه خط فرمانی برای اجرای کانتینرهای لینوکس مطابق با مشخصات OCI (ابتکار کانتینر باز) است.

create ایجاد کانتینر. پس از آماده‌سازی محیط کانتینر، زمان اجرا از فرایند کانتینر جدا می‌شود. برای راه‌اندازی کانتینر باید متعاقباً از دستور start استفاده شود.

delete حذف تعریف یک کانتینر.

exec اجرای یک فرمان درون کانتینر در حال اجرا.

list فهرست کردن کانتینرهای شناخته‌شده.

mounts add افزودن اتصالات (mounts) در زمان اجرای کانتینر. این دستور نیازمند دو آرگومان است: شناسه کانتینر و یک فایل JSON حاوی بخش اتصالات از فایل پیکربندی OCI. هر اتصال فهرست‌شده به کانتینر اضافه می‌شود. این دستور آزمایشی است و ممکن است بدون اطلاع قبلی تغییر کند.

mounts remove حذف اتصالات در زمان اجرای کانتینر. این دستور نیازمند دو آرگومان است: شناسه کانتینر و یک فایل JSON حاوی بخش اتصالات از فایل پیکربندی OCI. فقط صفت مقصد (destination) برای هر اتصال استفاده می‌شود. این دستور آزمایشی است و ممکن است بدون اطلاع قبلی تغییر کند.

kill ارسال سیگنال مشخص‌شده به فرایند init کانتینر. اگر سیگنالی مشخص نشود، SIGTERM ارسال می‌شود.

ps نمایش فرایندهای در حال اجرا درون کانتینر.

run ایجاد و راه‌اندازی فوری کانتینر.

spec تولید یک فایل پیکربندی نمونه.

start راه‌اندازی کانتینری که قبلاً ایجاد شده است. یک کانتینر را نمی‌توان چندین بار راه‌اندازی کرد.

state خروجی دادن وضعیت جاری کانتینر.

pause متوقف کردن موقت (pause) تمامی فرایندهای درون کانتینر.

resume از سرگیری اجرای فرایندهای متوقف‌شده در کانتینر.

update به‌روزرسانی محدودیت‌های منابع کانتینر.

checkpoint تهیه نقطه بازرسی (checkpoint) از کانتینر در حال اجرا با استفاده از CRIU.

restore بازیابی کانتینر از یک نقطه بازرسی.

به‌طور پیش‌فرض، هنگام اجرا به‌عنوان کاربر ریشه (root)، دستور crun وضعیت خود را در دایرکتوری /run/crun ذخیره می‌کند. در صورت اجرا به‌عنوان کاربر غیرارشد، متغیر محیطی XDG_RUNTIME_DIR لحاظ شده و از دایرکتوری $XDG_RUNTIME_DIR/crun استفاده می‌شود. گزینه عمومی --root این تنظیم را بازنویسی می‌کند.

--debug تولید خروجی با جزئیات کامل.

--log=LOG-DESTINATION تعیین مقصد برای پیام‌های خطا و هشدار تولیدشده توسط crun. اگر خطا در اواخر فرایند init کانتینر رخ دهد (زمانی که crun نظارت بر آن را متوقف کرده است)، در خطای استاندارد (stderr) کانتینر چاپ خواهد شد.

این گزینه به شکل BACKEND:SPECIFIER مشخص می‌شود.

بک‌اندهای زیر پشتیبانی می‌شوند:

  • file:PATH
  • journald:IDENTIFIER
  • syslog:IDENTIFIER

اگر هیچ بک‌اندی مشخص نشود، به‌طور پیش‌فرض از file: استفاده می‌شود.

--log-format=FORMAT تعیین قالب پیام‌های لاگ. می‌تواند text یا json باشد. پیش‌فرض text است.

--log-level=LEVEL تعیین سطح لاگ. می‌تواند یکی از مقادیر debug، warning یا error باشد. پیش‌فرض error است.

--root=DIR تعیین محل ذخیره وضعیت کانتینرهای crun.

--systemd-cgroup استفاده از systemd برای پیکربندی cgroupها. در صورت عدم تعیین، cgroup مستقیماً با استفاده از بک‌اند cgroupfs ایجاد می‌شود.

--cgroup-manager=MANAGER تعیین مدیر cgroup مورد استفاده. مقادیر مجاز عبارتند از cgroupfs، systemd و disabled.

-?, --help چاپ فهرست راهنما.

--usage چاپ پیام کوتاه نحوه استفاده.

-V, --version چاپ نسخه برنامه.

crun [global options] create [options] CONTAINER

--bundle=PATH مسیر به بسته OCI؛ به‌طور پیش‌فرض دایرکتوری جاری است.

--config=FILE تغییر فایل پیکربندی مورد استفاده. مقدار پیش‌فرض config.json است.

--console-socket=SOCKET مسیر به سوکت یونیکس که انتهای ptmx ترمینال (tty) کانتینر را دریافت می‌کند.

--no-new-keyring نگه‌داشتن همان کلید نشست (session key).

--no-pivot استفاده از chroot(2) به‌جای pivot_root(2) هنگام ایجاد کانتینر. این گزینه امن نیست و باید از آن اجتناب شود.

--preserve-fds=N تعداد توصیف‌کننده‌های فایل اضافی (FD) برای ارسال به کانتینر.

--pid-file=PATH مسیر فایلی که شناسه فرایند (PID) کانتینر را در بر خواهد داشت.

crun [global options] run [options] CONTAINER

--bundle=BUNDLE مسیر به بسته OCI؛ به‌طور پیش‌فرض دایرکتوری جاری است.

--config=FILE تغییر فایل پیکربندی مورد استفاده. مقدار پیش‌فرض config.json است.

--console-socket=SOCKET مسیر به سوکت یونیکس که انتهای ptmx ترمینال (tty) کانتینر را دریافت می‌کند.

--no-new-keyring نگه‌داشتن همان کلید نشست.

--no-pivot استفاده از chroot(2) به‌جای pivot_root(2) هنگام ایجاد کانتینر. این گزینه امن نیست و باید از آن اجتناب شود.

--preserve-fds=N تعداد توصیف‌کننده‌های فایل اضافی برای ارسال به کانتینر.

--pid-file=PATH مسیر فایلی که شناسه فرایند (PID) کانتینر را در بر خواهد داشت.

--detach جدا کردن فرایند کانتینر از نشست جاری.

crun [global options] delete [options] CONTAINER

--force حذف کانتینر حتی اگر همچنان در حال اجرا باشد.

--regex در نظر گرفتن CONTAINER به‌عنوان عبارت منظم و حذف تمام کانتینرهای منطبق.

crun [global options] exec [options] CONTAINER CMD

--apparmor=PROFILE تنظیم پروفایل apparmor برای فرایند.

--console-socket=SOCKET مسیر به سوکت یونیکس که انتهای ptmx ترمینال کانتینر را دریافت می‌کند.

--cwd=PATH تنظیم دایرکتوری کاری برای فرایند روی PATH.

--cap=CAP تعیین قابلیت (capability) اضافی برای افزودن به فرایند.

--detach جدا کردن فرایند کانتینر از نشست جاری.

--cgroup=PATH تعیین مسیر زیرگروه cgroup در داخل cgroup کانتینر. این مسیر باید از قبل در cgroup کانتینر وجود داشته باشد.

--env=ENV تعیین یک متغیر محیطی.

--no-new-privs تنظیم مقدار عدم دریافت دسترسی‌های جدید (no new privileges) برای فرایند.

--preserve-fds=N تعداد توصیف‌کننده‌های فایل اضافی برای ارسال به کانتینر.

--process=FILE مسیر به فایل حاوی پیکربندی JSON فرایند.

--process-label=VALUE تنظیم برچسب فرایند asm که معمولاً با selinux استفاده می‌شود.

--pid-file=PATH مسیر فایلی که شناسه فرایند (PID) جدید را در بر خواهد داشت.

-t --tty تخصیص یک شبه‌ترمینال (pseudo TTY).

-u USERSPEC --user=USERSPEC تعیین کاربر به فرمت UID[:GID].

crun [global options] list [options]

-q --quiet نمایش تنها شناسه کانتینر.

crun [global options] kill [options] CONTAINER SIGNAL

--all کشتن تمام فرایندهای موجود در کانتینر.

--regex در نظر گرفتن CONTAINER به‌عنوان عبارت منظم و ارسال سیگنال به تمام کانتینرهای منطبق.

crun [global options] ps [options]

--format=FORMAT تعیین قالب خروجی. باید table یا json باشد. به‌طور پیش‌فرض از table استفاده می‌شود.

crun [global options] spec [options]

-b DIR --bundle=DIR مسیر به ریشه دایرکتوری بسته (پیش‌فرض ".").

--rootless تولید یک فایل config.json که برای کاربر غیرارشد قابل استفاده باشد.

crun [global options] update [options] CONTAINER

--blkio-weight=VALUE تعیین وزن هر cgroup.

--cpu-period=VALUE دوره CPU CFS برای اعمال محدودیت سخت (hardcapping).

--cpu-quota=VALUE سقف سهمیه CPU CFS.

--cpu-rt-period=VALUE دوره بلادرنگ CPU برای اعمال محدودیت سخت.

--cpu-rt-runtime=VALUE سقف زمان اجرای بلادرنگ CPU.

--cpu-share=VALUE سهم‌های CPU (shares).

--cpuset-cpus=VALUE پردازنده‌های مورد استفاده.

--cpuset-mems=VALUE گره‌های حافظه مورد استفاده.

--kernel-memory=VALUE حد حافظه هسته.

--kernel-memory-tcp=VALUE حد حافظه هسته برای بافر TCP.

--memory=VALUE حد حافظه.

--memory-reservation=VALUE رزرو حافظه یا حد نرم (soft_limit).

--memory-swap=VALUE میزان کل حافظه و سواپ مصرفی.

--pids-limit=VALUE حداکثر تعداد شناسه‌های فرایند (PID) مجاز در کانتینر.

-r, --resources=FILE مسیر به فایل حاوی منابع برای به‌روزرسانی.

crun [global options] checkpoint [options] CONTAINER

--image-path=DIR مسیر ذخیره فایل‌های ایمیج CRIU.

--work-path=DIR مسیر ذخیره فایل‌های کاری و لاگ‌ها.

--leave-running در حال اجرا باقی گذاشتن فرایند پس از تهیه چک‌پوینت.

--tcp-established مجاز شمردن اتصالات باز TCP.

--ext-unix-sk مجاز شمردن سوکت‌های یونیکس خارجی.

--shell-job مجاز شمردن کارهای شل (shell jobs).

--pre-dump تنها چک‌پوینت گرفتن از حافظه کانتینر بدون متوقف ساختن آن. بازیابی کانتینر مستقیماً از pre-dump امکان‌پذیر نیست. pre-dump همواره نیازمند یک چک‌پوینت نهایی (بدون --pre-dump) است. می‌توان به تعداد دلخواه pre-dump انجام داد. برای دومین pre-dump یا برای چک‌پوینت نهایی، استفاده از --parent-path برای ارجاع crun (و در نتیجه CRIU) به pre-dump ضروری است.

--parent-path=DIR انجام چندین pre-dump یا چک‌پوینت نهایی پس از یک یا چند pre-dump مستلزم آن است که crun (و در نتیجه CRIU) از مکان pre-dump مطلع باشد. استفاده از یک مسیر نسبی از دایرکتوری اصلی چک‌پوینت که توسط --image-path تعیین شده ضروری است. استفاده از مسیر مطلق با خطا مواجه خواهد شد.

--manage-cgroups-mode=MODE تعیین حالت مدیریت cgroup در CRIU. مقادیر مجاز عبارتند از soft، ignore، full یا strict. مقدار پیش‌فرض soft است.

crun [global options] restore [options] CONTAINER

-b DIR --bundle=DIR دایرکتوری بسته کانتینر (پیش‌فرض ".").

--image-path=DIR مسیر ذخیره فایل‌های ایمیج CRIU.

--work-path=DIR مسیر ذخیره فایل‌های کاری و لاگ‌ها.

--tcp-established مجاز شمردن اتصالات باز TCP.

--ext-unix مجاز شمردن سوکت‌های یونیکس خارجی.

--shell-job مجاز شمردن کارهای شل.

--detach جدا شدن از فرایند کانتینر.

--pid-file=FILE محل نوشتن شناسه فرایند (PID) کانتینر.

--manage-cgroups-mode=MODE تعیین حالت مدیریت cgroup در CRIU. مقادیر مجاز عبارتند از soft، ignore، full یا strict. مقدار پیش‌فرض soft است.

--lsm-profile=TYPE:NAME تعیین پروفایل LSM مورد استفاده در طول بازیابی. مقدار TYPE می‌تواند apparmor یا selinux باشد.

--lsm-mount-context=VALUE تعیین بافت اتصال (mount context) جدید LSM در طول بازیابی. این گزینه اطلاعات بافت اتصال موجود را با مقدار مشخص‌شده جایگزین می‌کند. این امر زمانی مفید است که کانتینر در یک Pod موجود بازیابی می‌شود و برچسب‌های selinux در زمان بازیابی باید تغییر کنند.

تنظیم نوع بافت اتصال روی حجم‌های متصل‌شده با برچسب‌های SELinux.

انواع بافت معتبر عبارتند از:
context (پیش‌فرض)
fscontext
defcontext
rootcontext

اطلاعات بیشتر درباره نحوه عملکرد فلگ‌های بافت اتصال را می‌توانید در صفحه راهنمای mount(8) بیابید.

اگر یادداشت (annotation) با عنوان run.oci.seccomp.receiver=PATH مشخص شود، شنونده seccomp به سوکت یونیکس ارسال می‌شود که در مسیر مشخص‌شده گوش می‌دهد. همچنین می‌توان آن را با متغیر محیطی RUN_OCI_SECCOMP_RECEIVER تنظیم کرد. این یک ویژگی آزمایشی است و به محض پشتیبانی در مشخصات زمان اجرای OCI حذف خواهد شد. باید یک مسیر مطلق باشد.

اگر یادداشت run.oci.seccomp.plugins=PLUGIN1[:PLUGIN2]... مشخص شود، توصیف‌کننده فایل شنونده seccomp از طریق پلاگین‌های مشخص‌شده مدیریت می‌شود. پلاگین یا باید یک مسیر مطلق باشد یا نام فایلی که توسط dlopen(3) پیدا شود. اطلاعات بیشتر درباره نحوه جستجو در صفحه راهنمای ld.so(8) موجود است.

اگر یادداشت run.oci.seccomp_fail_unknown_syscall وجود داشته باشد، هنگامی که یک فراخوانی سیستمی ناشناخته در پیکربندی seccomp مشاهده شود، crun با خطا متوقف خواهد شد.

اگر یادداشت run.oci.seccomp_bpf_data وجود داشته باشد، crun بخش seccomp را در فایل پیکربندی OCI نادیده گرفته و از داده‌های مشخص‌شده به‌عنوان داده‌های خام فراخوانی سیستمی seccomp(SECCOMP_SET_MODE_FILTER) استفاده می‌کند. داده‌ها باید با فرمت base64 کدگذاری شده باشند.

این یک ویژگی آزمایشی است و پس از پشتیبانی در مشخصات OCI حذف خواهد شد.

اگر یادداشت run.oci.keep_original_groups وجود داشته باشد، crun فراخوانی سیستمی setgroups را که برای تنظیم گروه‌های اضافی مشخص‌شده در پیکربندی OCI یا بازنشانی لیست آن‌ها استفاده می‌شود، نادیده می‌گیرد.

این یک ویژگی آزمایشی است و پس از گنجانده شدن در مشخصات OCI حذف خواهد شد.

در صورت وجود، مسیر سوکت یونیکسی را مشخص می‌کند که pidfd فرایند کانتینر را دریافت خواهد کرد.

اگر یادداشت run.oci.systemd.force_cgroup_v1=/PATH وجود داشته باشد، crun نقطه اتصال مشخص‌شده /PATH را با یک اتصال cgroup v1 متشکل از سلسله‌مراتب منفرد none,name=systemd جایگزین می‌کند. این قابلیت برای اجرای کانتینرهایی که از نسخه‌های قدیمی‌تر systemd فاقد پشتیبانی از cgroup v2 استفاده می‌کنند، روی سیستمی با cgroup v2 کاربرد دارد.

نکته: میزبان کانتینر شما باید از قبل نقطه اتصال cgroup v1 را داشته باشد، در غیر این صورت کار نخواهد کرد. اگر قصد دارید کانتینر را به‌صورت rootless اجرا کنید، کاربری که کانتینر تحت آن اجرا می‌شود باید دسترسی لازم به این نقطه اتصال را داشته باشد.

برای مثال، به‌عنوان ریشه:

mkdir /sys/fs/cgroup/systemd
mount cgroup -t cgroup /sys/fs/cgroup/systemd -o none,name=systemd,xattr
chown -R the_user.the_user /sys/fs/cgroup/systemd

بازنویسی نام زیرگروه cgroup در systemd که تحت scope سیستم‌دی ایجاد می‌شود، به طوری که cgroup نهایی مانند زیر خواهد بود:

/sys/fs/cgroup/$PATH/$SUBGROUP

هنگامی که روی رشته خالی تنظیم شود، زیرگروه cgroup ایجاد نمی‌شود.

در صورت عدم تعیین، در cgroup v2 به‌طور پیش‌فرض container و در cgroup v1 به‌طور پیش‌فرض "" است.

برای مثال:

/sys/fs/cgroup//system.slice/foo-352700.scope/container

اگر یادداشت run.oci.systemd.subgroup مشخص شود، زیرگروه دیگری ایجاد شده و فرایند کانتینر به آن منتقل می‌شود.

اگر از فضای‌نام cgroup استفاده شود، فضای‌نام cgroup قبل از انتقال کانتینر به cgroup تفویض‌شده (delegated) ایجاد می‌گردد.

/sys/fs/cgroup/$PATH/$SUBGROUP/$DELEGATED-CGROUP

زمان اجرا هیچ محدودیتی را روی زیرگروه $DELEGATED-CGROUP اعمال نمی‌کند و فقط از $PATH/$SUBGROUP استفاده می‌کند.

بار کاری کانتینر به‌طور کامل $DELEGATE-CGROUP را مدیریت می‌کند، اما محدودیت‌های اعمال‌شده روی $PATH/$SUBGROUP همچنان بر $DELEGATE-CGROUP نیز حاکم خواهد بود.

از آنجا که تفویض cgroup روی cgroup v1 امن نیست، این گزینه تنها روی cgroup v2 پشتیبانی می‌شود.

اگر یادداشت run.oci.hooks.stdout وجود داشته باشد، crun فایل مشخص‌شده را باز کرده و از آن به‌عنوان خروجی استاندارد برای فرایندهای هوک استفاده می‌کند. فایل در حالت الحاق (append) باز شده و در صورت عدم وجود ایجاد می‌شود.

اگر یادداشت run.oci.hooks.stderr وجود داشته باشد، crun فایل مشخص‌شده را باز کرده و از آن به‌عنوان خطای استاندارد برای فرایندهای هوک استفاده می‌کند. فایل در حالت الحاق باز شده و در صورت عدم وجود ایجاد می‌شود.

این یک ویژگی آزمایشی است.

در صورت تعیین، گرداننده مشخص‌شده برای اجرای کانتینر را اجرا می‌کند. مقادیر پشتیبانی‌شده تنها krun و wasm هستند.

  • krun: هنگامی که krun مشخص شود، شیء مشترک libkrun.so بارگذاری شده و برای راه‌اندازی کانتینر با استفاده از libkrun به کار می‌رود.
  • wasm: در صورت تعیین، گرداننده wasm برای کانتینر اجرا می‌شود. این ویژگی امکان اجرای بارهای کاری wasm را به‌صورت بومی فراهم می‌کند. یک فایل باینری .wasm را به‌عنوان ورودی می‌پذیرد و اگر .wat ارائه شود به‌طور خودکار به ماژول wasm کامپایل خواهد شد. خروجی استاندارد ماژول wasm از طریق crun بازپخش می‌شود.

این یادداشت امکان تعیین یک فایل پیکربندی CRIU RPC را فراهم می‌کند. در صورت عدم ارائه، crun به دنبال /etc/criu/crun.conf می‌گردد. اگر هیچ‌کدام از یادداشت یا crun.conf موجود نباشد، از /etc/criu/runc.conf برای سازگاری با runc استفاده می‌شود. این قابلیت نیازمند CRIU نسخه 4.2 یا بالاتر است. گزینه‌های مشخص‌شده در فایل پیکربندی، مقادیر پیش‌فرض گزینه‌های CRIU مشخص‌شده توسط crun را بازنویسی می‌کنند. برای مثال، تعیین tcp-established یا tcp-close می‌تواند برای چک‌پوینت/بازیابی کانتینرهای دارای اتصالات برقرار TCP استفاده شود، و log-file=<file> برای تعیین فایل لاگ سفارشی CRIU به کار می‌رود.

اگر گزینه tmpcopyup برای یک tmpfs تعیین شود، مسیری که توسط اتصال tmpfs پوشانده شده است به‌طور بازگشتی به درون خود tmpfs کپی می‌شود.

اگر گزینه copy-symlink تعیین شود، چنانچه مبدا یک اتصال bind یک پیوند نمادین باشد، پیوند نمادین در مقصد مشخص‌شده بازسازی می‌شود به‌جای اینکه اتصالی تلاش کند خود پیوند نمادین را دنبال و حل کند. اگر مقصد از قبل وجود داشته باشد و پیوند نمادینی با محتوای مورد انتظار نباشد، crun خطایی را بازمی‌گرداند.

هنگامی که این گزینه برای اتصال bind مشخص شود، و مقصد اتصال یک پیوند نمادین باشد، crun خود پیوند نمادین را در مقصد متصل می‌کند.

هنگامی که این گزینه برای اتصال bind مشخص شود، و مبدا اتصال یک پیوند نمادین باشد، crun به‌جای فایل یا دایرکتوری‌ای که پیوند به آن اشاره می‌کند، از خود پیوند نمادین استفاده خواهد کرد.

اگر گزینه اتصال r$FLAG مشخص شود، فلگ $FLAG به‌طور بازگشتی برای هر اتصال فرزند تنظیم می‌شود.

فلگ‌های زیر پشتیبانی می‌شوند:

  • "rro"
  • "rrw"
  • "rsuid"
  • "rnosuid"
  • "rdev"
  • "rnodev"
  • "rexec"
  • "rnoexec"
  • "rsync"
  • "rasync"
  • "rdirsync"
  • "rmand"
  • "rnomand"
  • "ratime"
  • "rnoatime"
  • "rdiratime"
  • "rnodiratime"
  • "rrelatime"
  • "rnorelatime"
  • "rstrictatime"
  • "rnostrictatime"

اگر گزینه idmap مشخص شود، اتصال با استفاده از فضای‌نام کاربر مقصد کانتینر نگاشت شناسه (ID mapped) می‌شود. این ویژگی آزمایشی است و در هر زمان ممکن است بدون اطلاع قبلی تغییر کند.

گزینه idmap از نگاشت سفارشی که می‌تواند با فضای‌نام کاربر مورد استفاده کانتینر متفاوت باشد پشتیبانی می‌کند.

نگاشت را می‌توان پس از گزینه idmap مانند زیر مشخص کرد: idmap=uids=0-1-10#10-11-10;gids=0-100-10.

برای هر سه‌تایی (triplet)، مقدار اول شروع شناسه‌های سیستم فایل پشتیبان است که به مقدار دوم روی میزبان نگاشت می‌شوند. طول این نگاشت در مقدار سوم داده می‌شود.

محدوده‌های چندگانه با # از هم جدا می‌شوند.

این مقادیر در فایل‌های /proc/$PID/uid_map و /proc/$PID/gid_map نوشته می‌شوند تا فضای‌نام کاربر را برای اتصال نگاشت‌شده با شناسه ایجاد کنند.

تنها دو گزینه‌ای که در حال حاضر پس از idmap پشتیبانی می‌شوند uids و gids هستند.

هنگامی که یک نگاشت سفارشی مشخص شود، یک فضای‌نام کاربر جدید برای اتصال نگاشت‌شده ایجاد می‌گردد.

اگر هیچ گزینه‌ای مشخص نشود، از فضای‌نام کاربر کانتینر استفاده می‌شود.

اگر نگاشت مشخص‌شده با یک کاراکتر '@' آغاز شود، نگاشت نسبت به فضای‌نام کاربر کانتینر در نظر گرفته می‌شود. شناسه میزبان برای این نگاشت تغییر می‌یابد تا موقعیت نسبی کاربر کانتینر در فضای‌نام کاربر کانتینر لحاظ شود.

برای مثال، نگاشت: uids=@1-3-10، با توجه به پیکربندی مانند:

"uidMappings": [
      {
        "containerID": 0,
        "hostID": 0,
        "size": 1
      },
      {
        "containerID": 1,
        "hostID": 2,
        "size": 1000
      }
    ]

به مقدار مطلق uids=1-4-10 تبدیل خواهد شد، که در آن عدد ۴ از جمع ۳ (شناسه کانتینر در نگاشت uids=) و ۱ (hostID - containerID برای نگاشت فضای‌نام کاربر در جایی که containerID = 1 یافت می‌شود) به دست آمده است.

پیاده‌سازی فعلی محدوده‌های چندگانه فضای‌نام کاربر را در نظر نمی‌گیرد، بنابراین مسئولیت تقسیم یک نگاشت در صورت همپوشانی با چندین محدوده در فضای‌نام کاربر بر عهده فراخواننده است. در چنین حالتی هیچ خطایی گزارش نخواهد شد.

هنگام اجرا به‌عنوان کاربری غیر از ریشه، یک فضای‌نام کاربر به‌طور خودکار ایجاد می‌شود حتی اگر در فایل پیکربندی مشخص نشده باشد. کاربر فعلی به شناسه 0 در کانتینر نگاشت می‌شود، و هر شناسه اضافی مشخص‌شده در فایل‌های /etc/subuid و /etc/subgid به‌طور خودکار از شناسه 1 شروع به اضافه شدن می‌کند.

پشتیبانی از cgroup v1 منسوخ شده است و در انتشارات آینده حذف خواهد شد.

نکته: نسخه 2 از cgroup هنوز از کنترل فرایندهای بلادرنگ (realtime) پشتیبانی نمی‌کند و کنترل‌کننده cpu تنها زمانی می‌تواند فعال شود که تمام فرایندهای RT در cgroup ریشه قرار داشته باشند. این امر باعث شکست crun در صورت اجرا در کنار فرایندهای RT می‌شود.

اگر پیکربندی cgroup یافت‌شده مربوط به cgroup v1 باشد، crun هنگام اجرا روی سیستم cgroup v2 تلاش می‌کند آن را تبدیل کند.

این‌ها منابع OCI هستند که در حال حاضر با cgroup v2 پشتیبانی می‌شوند و نحوه تبدیل آن‌ها در صورت نیاز از پیکربندی cgroup v1 شرح داده شده است.

OCI (x) cgroup 2 value (y) conversion comment
limit memory.max y = x
swap memory.swap.max y = x - memory_limit حد سواپ در cgroup v1 مصرف حافظه را نیز در بر می‌گیرد
reservation memory.low y = x

OCI (x) cgroup 2 value (y) conversion comment
limit pids.max y = x

OCI (x) cgroup 2 value (y) conversion comment
shares cpu.weight y=10^((log2(x)^2 + 125 * log2(x)) / 612.0 - 7.0 / 34.0) تبدیل از [2-262144] به [1-10000]
period cpu.max y = x period و quota با هم نوشته می‌شوند
quota cpu.max y = x period و quota با هم نوشته می‌شوند

OCI (x) cgroup 2 value (y) conversion comment
weight io.bfq.weight y = x
weight_device io.bfq.weight y = x
weight io.weight (fallback) y = 1 + (x-10)*9999/990 تبدیل خطی از [10-1000] به [1-10000]
weight_device io.weight (fallback) y = 1 + (x-10)*9999/990 تبدیل خطی از [10-1000] به [1-10000]
rbps io.max y=x
wbps io.max y=x
riops io.max y=x
wiops io.max y=x

OCI (x) cgroup 2 value (y) conversion comment
cpus cpuset.cpus y = x
mems cpuset.mems y = x

OCI (x) cgroup 2 value (y) conversion comment
.limit_in_bytes hugetlb..max y = x
دستورات کاربر