DISTROBOX-CREATE(1) User Manual DISTROBOX-CREATE(1)

distrobox-create - ایجاد و مقداردهی اولیه کانتینرهای distrobox

دستور distrobox-create وظیفهٔ ایجاد کانتینر با نام و تصویر (image) ورودی را بر عهده دارد. کانتینر ایجادشده به‌طور عمیق با میزبان یکپارچه خواهد شد و امکان اشتراک‌گذاری دایرکتوری HOME کاربر، حافظه‌های ذخیره‌سازی خارجی، دستگاه‌های USB خارجی، برنامه‌های گرافیکی (X11/Wayland) و صدا را فراهم می‌سازد.

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)، این گزینه تنظیم گذرواژه کاربر را نادیده گرفته و آن را خالی می‌گذارد. ⚠️ ⚠️

برای مشاهده فهرست تصاویر و مدیران کانتینر سازگار، لطفاً به صفحات راهنما مراجعه کنید:
    man distrobox
    man distrobox-compatibility
یا صفحه مستندات را در نشانی زیر بررسی نمایید: https://github.com/89luca89/distrobox/blob/main/docs/compatibility.md#containers-distros

ایجاد یک 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

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 خواهد بود.

گزینهٔ --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 می‌توانید آن‌ها را با سیستم‌های مهمان یکپارچه نمایید:

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