| DISTROBOX-CREATE(1) | User Manual | DISTROBOX-CREATE(1) |
نام (NAME)
distrobox-create - ایجاد و مقداردهی اولیه کانتینرهای distrobox
توضیحات (DESCRIPTION)
دستور distrobox-create وظیفهٔ ایجاد کانتینر با نام و تصویر (image) ورودی را بر عهده دارد. کانتینر ایجادشده بهطور عمیق با میزبان یکپارچه خواهد شد و امکان اشتراکگذاری دایرکتوری HOME کاربر، حافظههای ذخیرهسازی خارجی، دستگاههای USB خارجی، برنامههای گرافیکی (X11/Wayland) و صدا را فراهم میسازد.
خلاصه دستور (SYNOPSIS)
distrobox create
-
--image/-i: تصویر مورد استفاده برای کانتینر پیشفرض: ${container_image_default} --name/-n: نام برای distrobox پیشفرض: ${container_name_default} --hostname: نام میزبان (hostname) برای distrobox پیشفرض: <container-name>.$(uname -n) --pull/-p: دریافت تصویر حتی در صورت وجود محلی (متضمن --yes) --yes/-Y: غیرتعاملی، دریافت تصاویر بدون پرسش --root/-r: اجرای podman/docker/lilipod با دسترسیهای ریشه (root). توجه داشته باشید اگر به root نیاز دارید، این روش نسبت به "sudo distrobox" ارجح است (نکته: در صورت لزوم استفاده از برنامهای غیر از 'sudo' برای دسترسیهای root، آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید) --clone/-c: نام کانتینر distrobox برای استفاده به عنوان پایه کانتینر جدید این گزینه برای تغییر نام یک distrobox موجود یا داشتن چندین نسخه از یک محیط مفید خواهد بود. --home/-H: انتخاب یک دایرکتوری HOME سفارشی برای کانتینر. مفید برای جلوگیری از شلوغ شدن دایرکتوری home میزبان با فایلهای موقت. --volume: فضاهای ذخیرهسازی اضافی (volumes) برای افزودن به کانتینر --additional-flags/-a: پرچمهای اضافی برای ارسال به دستور مدیر کانتینر --additional-packages/-ap: بستههای اضافی برای نصب در طول راهاندازی اولیه کانتینر --init-hooks: دستورات اضافی برای اجرا در پایان مقداردهی اولیه کانتینر --pre-init-hooks: دستورات اضافی برای اجرا در ابتدای مقداردهی اولیه کانتینر --init/-I: استفاده از سیستم init (مانند systemd) درون کانتینر. این گزینه باعث میشود فرآیندهای میزبان از داخل کانتینر قابل مشاهده نباشند (متضمن --unshare-process). بسته به تصویر کانتینر ممکن است به بستههای اضافی نیاز داشته باشد: https://github.com/89luca89/distrobox/blob/main/docs/useful_tips.md#using-init-system-inside-a-distrobox --nvidia: تلاش برای یکپارچهسازی درایورهای nVidia میزبان در مهمان --platform: مشخص کردن پلتفرم مورد استفاده، مثلاً: linux/arm64 --unshare-devsys: عدم اشتراکگذاری دستگاههای میزبان و دایرکتوریهای sysfs از میزبان --unshare-groups: عدم انتقال گروههای اضافی کاربر به درون کانتینر --unshare-ipc: عدم اشتراکگذاری فضای نام ipc با میزبان --unshare-netns: عدم اشتراکگذاری فضای نام شبکه (net) با میزبان --unshare-process: عدم اشتراکگذاری فضای نام فرآیندها با میزبان --unshare-all: فعالسازی تمام پرچمهای unshare زیر --compatibility/-C: نمایش فهرست تصاویر سازگار --help/-h: نمایش این پیام راهنما --no-entry: عدم ایجاد مدخل برای کانتینر در فهرست برنامهها --dry-run/-d: صرفاً چاپ دستور تولیدشده برای مدیر کانتینر --verbose/-v: نمایش اطلاعات با جزئیات بیشتر --version/-V: نمایش نسخه --absolutely-disable-root-password-i-am-really-positively-sure: ⚠️ ⚠️ هنگام راهاندازی یک distrobox با دسترسی ریشه (rootful)، این گزینه تنظیم گذرواژه کاربر را نادیده گرفته و آن را خالی میگذارد. ⚠️ ⚠️
سازگاری (COMPATIBILITY)
-
برای مشاهده فهرست تصاویر و مدیران کانتینر سازگار، لطفاً به صفحات راهنما مراجعه کنید: man distrobox man distrobox-compatibility یا صفحه مستندات را در نشانی زیر بررسی نمایید: https://github.com/89luca89/distrobox/blob/main/docs/compatibility.md#containers-distros
مثالها (EXAMPLES)
ایجاد یک distrobox با تصویر alpine به نام my-alpine-container
-
distrobox create --image alpine my-alpine-container
ایجاد یک distrobox از تصویر fedora-toolbox:35
-
distrobox create --image registry.fedoraproject.org/fedora-toolbox:35 --name fedora-toolbox-35
کلون کردن یک کانتینر distrobox موجود
-
distrobox create --clone fedora-35 --name fedora-35-copy
دریافت همیشگی تصویر تازه هنگام ایجاد distrobox
-
distrobox create --pull --image centos:stream9 --home ~/distrobox/centos9
افزودن متغیرهای محیطی بیشتر به کانتینر
-
distrobox create --image fedora:35 --name test --additional-flags "--env MY_VAR=value"
افزودن فضاهای ذخیرهسازی (volumes) بیشتر به کانتینر
-
distrobox create --image fedora:35 --name test --volume /opt/my-dir:/usr/local/my-dir:rw --additional-flags "--pids-limit -1"
افزودن بستههای بیشتر به کانتینر
-
distrobox create --image alpine:latest --name test2 --additional-packages "git tmux vim"
استفاده از init-hooks برای اجرای عملیات در زمان راهاندازی کانتینر
-
distrobox create --image alpine:latest --name test --init-hooks "touch /var/tmp/test1 && touch /var/tmp/test2"
استفاده از pre-init-hooks برای اجرای عملیات در ابتدای راهاندازی کانتینر (پیش از اجرای هرگونه مدیر بسته)
-
distrobox create -i docker.io/almalinux/8-init --init --name test --pre-init-hooks "dnf config-manager --enable powertools && dnf -y install epel-release"
استفاده از init برای ایجاد یک کانتینر Systemd (مشابه یک LXC عمل میکند):
-
distrobox create -i ubuntu:latest --name test --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" --init
استفاده از init برای ایجاد یک کانتینر OpenRC (مشابه یک LXC عمل میکند):
-
distrobox create -i alpine:latest --name test --additional-packages "openrc" --init
استفاده از یکپارچهسازی با درایورهای NVidia میزبان
-
distrobox create --image ubuntu:22.04 --name ubuntu-nvidia --nvidia
عدم استفاده از IP میزبان در داخل کانتینر:
-
distrobox create --image ubuntu:latest --name test --unshare-netns
ایجاد یک کانتینر ایزولهتر که در آن تنها $HOME، سوکتهای پایه و سیستمفایل میزبان (در /run/host) به اشتراک گذاشته میشوند:
-
distrobox create --name unshared-test --unshare-all
ایجاد یک کانتینر ایزولهتر با سیستم init مختص به خود؛ این کانتینر بسیار مشابه یک کانتینر کامل LXC عمل خواهد کرد:
-
distrobox create --name unshared-init-test --unshare-all --init --image fedora:latest
استفاده از متغیرهای محیطی برای تعیین نام کانتینر، تصویر و مدیر کانتینر:
-
DBX_CONTAINER_MANAGER="docker" DBX_NON_INTERACTIVE=1 DBX_CONTAINER_NAME=test-alpine DBX_CONTAINER_IMAGE=alpine distrobox-create
محیط (ENVIRONMENT)
-
DBX_CONTAINER_ALWAYS_PULL DBX_CONTAINER_CUSTOM_HOME DBX_CONTAINER_HOME_PREFIX DBX_CONTAINER_IMAGE DBX_CONTAINER_MANAGER DBX_CONTAINER_NAME DBX_CONTAINER_HOSTNAME DBX_NON_INTERACTIVE DBX_SUDO_PROGRAM
متغیر DBX_CONTAINER_HOME_PREFIX مشخص میکند که دایرکتوریهای home کانتینرها در کجا مستقر شوند. اگر آن را به عنوان ~/dbx تعریف کنید، دایرکتوری home تمام کانتینرهای بعدی به صورت ~/dbx/$container_name خواهد بود.
اطلاعات بیشتر (EXTRA)
گزینهٔ --additional-flags یا -a برای تغییر پیشفرضها در هنگام ایجاد کانتینر کاربرد دارد. به عنوان مثال:
-
distrobox create -i docker.io/library/archlinux -n dev-arch podman container inspect dev-arch | jq '.[0].HostConfig.PidsLimit' 2048 distrobox rm -f dev-arch distrobox create -i docker.io/library/archlinux -n dev-arch --volume $CBL_TC:/tc --additional-flags "--pids-limit -1" podman container inspect dev-arch | jq '.[0].HostConfig,.PidsLimit' 0
فضاهای ذخیرهسازی اضافی را میتوان با پرچم --volume مشخص کرد. این پرچم از همان استانداردهای docker و podman برای تعیین نقطهٔ اتصال استفاده میکند، یعنی: --volume SOURCE_PATH:DEST_PATH:MODE.
-
distrobox create --image docker.io/library/archlinux --name dev-arch --volume /usr/share/:/var/test:ro
در زمان ایجاد کانتینر، میتوان (با استفاده از additional-flags) متغیرهای محیطی مشخصی را تعریف کرد که درون کانتینر ماندگار بوده و مستقل از محیط فعلی شما باشند:
-
distrobox create --image fedora:35 --name test --additional-flags "--env MY_VAR=value"
گزینهٔ --init-hooks برای افزودن دستورات به نقطهٔ ورود (init) کانتینر مفید است. این قابلیت برای ایجاد کانتینرهایی با برنامههای از پیش نصبشده یا افزودن کاربران و گروهها کاربرد دارد.
-
distrobox create --image fedora:35 --name test --init-hooks "dnf groupinstall -y \"C Development Tools and Libraries\""
گزینهٔ --init برای ایجاد کانتینری کاربرد دارد که از سیستم init مستقل خود در درونش بهره میبرد. برای نمونه:
-
distrobox create -i docker.io/almalinux/8-init --init --name test distrobox create -i docker.io/library/debian --additional-packages "systemd" --init --name test-debian
درون چنین کانتینری امکان استفاده از واحدهای استاندارد systemd فراهم خواهد بود:
-
~$ distrobox enter test user@test:~$ sudo systemctl enable --now sshd user@test:~$ sudo systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-01-28 22:54:50 CET; 17s ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 291 (sshd)
توجه داشته باشید که فعالسازی --init موجب غیرفعال شدن یکپارچهسازی فرآیندهای میزبان خواهد شد. از داخل کانتینر قادر به مشاهده و مدیریت فرآیندهای سیستم میزبان نخواهید بود. این امر به این دلیل ضروری است که /sbin/init باید شناسهٔ فرآیند ۱ (PID 1) باشد.
اگر مایل به استفاده از تصویری هستید که از پیش برای init آماده نشده است، باید بستههای مربوطه را اضافه کنید:
-
distrobox create -i alpine:latest --init --additional-packages "openrc" -n test distrobox create -i debian:stable --init --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" -n test distrobox create -i ubuntu:22.04 --init --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" -n test distrobox create -i archlinux:latest --init --additional-packages "systemd" -n test distrobox create -i registry.opensuse.org/opensuse/tumbleweed:latest --init --additional-packages "systemd" -n test distrobox create -i registry.fedoraproject.org/fedora:39 --init --additional-packages "systemd" -n test
پرچم --init برای ایجاد کانتینرهای سیستمی مناسب است؛ جایی که کانتینر بیشتر شبیه به یک ماشین مجازی (VM) کامل عمل میکند تا یک کانتینر تکبرنامهای. درون آن سیستم init جداگانه، نشست کاربر (user-session)، دیمنها و سایر سرویسها را در اختیار خواهید داشت.
پرچم --home به شما اجازه میدهد یک دایرکتوری HOME سفارشی برای کانتینر مشخص کنید. توجه کنید که این کار مانع اتصال دایرکتوری home میزبان نمیشود، اما تضمین میکند که فایلهای پیکربندی و dotfileها دایرکتوری میزبان را شلوغ نکنند.
پرچم --root امکان ایجاد کانتینر با دسترسیهای واقعی ریشه (root) را فراهم میآورد. در اولین اجرای enter، کاربر ملزم به تنظیم گذرواژه خواهد بود. این فرآیند به منظور فعال نشدن sudo/su بدون گذرواژه در یک کانتینر rootful انجام میشود؛ چرا که در این حالت، کاربر ریشه درون کانتینر همان کاربر ریشه در بیرون کانتینر است!
گزینهٔ --absolutely-disable-root-password-i-am-really-positively-sure مرحلهٔ تنظیم گذرواژه را نادیده گرفته و آن را خالی میگذارد. این عمل کاملاً خطرناک است و شما واقعاً و اکیداً نباید این گزینه را فعال کنید.
از نسخهٔ 1.4.0 ابزار distrobox، هنگام ایجاد کانتینر جدید، یک مدخل در فهرست برنامههای کاربردی سیستم نیز ایجاد میشود.
یکپارچهسازی با NVidia (NVidia integration)
اگر سیستم میزبان مجهز به پردازشگر گرافیکی NVidia به همراه درایورهای اختصاصی نصبشده باشد، با استفاده از پرچم --nvidia میتوانید آنها را با سیستمهای مهمان یکپارچه نمایید:
distrobox create --nvidia --image ubuntu:latest --name ubuntu-nvidia
توجه داشته باشید که این قابلیت با سیستمهای فاقد glibc سازگار نبوده و برای کارکرد به توزیعهای نسبتاً جدیدتر نیاز دارد.
کارکرد این ویژگی روی سیستمهای زیر با موفقیت آزمایش شده است:
- •
- Almalinux
- •
- Archlinux
- •
- Centos 7 و جدیدتر
- •
- Clearlinux
- •
- Debian 10 و جدیدتر
- •
- OpenSUSE Leap
- •
- OpenSUSE Tumbleweed
- •
- Rockylinux
- •
- Ubuntu 18.04 و جدیدتر
- •
- Void Linux (نسخه glibc)
| Mar 2026 | Distrobox |