DOCKER(1) Docker User Manuals DOCKER(1)

docker-container-create - ایجاد یک کانتینر جدید

docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

یک لایه کانتینری قابل‌نوشتن روی ایمیج مشخص‌شده ایجاد می‌کند و آن را برای اجرای دستور مشخص‌شده آماده می‌سازد. سپس شناسه کانتینر در STDOUT چاپ می‌شود. این کار مشابه docker run -d است، با این تفاوت که کانتینر هرگز شروع به کار نمی‌کند. سپس می‌توانید در هر زمان با استفاده از دستور docker start کانتینر را راه‌اندازی کنید.

وضعیت اولیه کانتینر ایجادشده با docker create برابر با 'created' است.

مقدار CONTAINER-DIR باید یک مسیر مطلق مانند /src/docs باشد. مقدار HOST-DIR می‌تواند یک مسیر مطلق یا مقدار name باشد. مقدار name باید با یک نویسه الفبایی-عددی آغاز شود و به دنبال آن a-z0-9، _ (زیرخط)، . (نقطه) یا - (خط تیره) بیاید. یک مسیر مطلق با یک / (اسلش) شروع می‌شود.

اگر یک HOST-DIR ارائه دهید که یک مسیر مطلق باشد، داکر پیوند bind-mount را به مسیری که مشخص کرده‌اید انجام می‌دهد. اگر یک name ارائه دهید، داکر یک حجم نام‌گذاری‌شده با آن name ایجاد می‌کند. برای نمونه، می‌توانید برای مقدار HOST-DIR هر یک از مقادیر /foo یا foo را مشخص کنید. اگر مقدار /foo را ارائه دهید، داکر یک bind mount ایجاد می‌کند. اگر مشخصه foo را ارائه دهید، داکر یک حجم نام‌گذاری‌شده ایجاد می‌کند.

می‌توانید چندین گزینه -v را برای سوار کردن (mount) یک یا چند اتصال به کانتینر مشخص کنید. برای استفاده از همین اتصالات در کانتینرهای دیگر، گزینه --volumes-from را نیز مشخص نمایید.

می‌توانید گزینه‌های اضافی را برای هر bind mount پس از یک دونقطه اضافی ارائه دهید. پسوند :ro یا :rw به ترتیب یک حجم را در حالت فقط‌خواندنی یا خواندن-نوشتن سوار می‌کند. به‌طور پیش‌فرض، حجم‌ها در حالت خواندن-نوشتن سوار می‌شوند.
همچنین می‌توانید نیازمندی سازگاری (consistency) را برای اتصال مشخص کنید: :consistent (پیش‌فرض)، :cached، یا :delegated. گزینه‌های متعدد با کاما از هم جدا می‌شوند، مانند :ro,cached.

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

برای تغییر برچسب در بستر کانتینر، می‌توانید یکی از دو پسوند :z یا :Z را به اتصال حجم اضافه کنید. این پسوندها به داکر می‌گویند که اشیاء فایلی را روی حجم‌های مشترک مجدداً برچسب‌گذاری کند. گزینه z به داکر می‌گوید که دو کانتینر محتوای حجم را به اشتراک می‌گذارند. در نتیجه، داکر محتوا را با یک برچسب محتوای مشترک برچسب‌گذاری می‌کند. برچسب‌های حجم مشترک به همه کانتینرها اجازه خواندن/نوشتن محتوا را می‌دهند. گزینه Z به داکر می‌گوید که محتوا را با یک برچسب خصوصیِ به اشتراک گذاشته‌نشده برچسب‌گذاری کند. فقط کانتینر فعلی می‌تواند از یک حجم خصوصی استفاده کند.

به‌طور پیش‌فرض، حجم‌های bind mount شده private هستند. این بدان معناست که هرگونه اتصال انجام‌شده درون کانتینر روی میزبان قابل مشاهده نخواهد بود و برعکس. می‌توان این رفتار را با مشخص کردن ویژگی انتشار اتصال (mount propagation) حجم تغییر داد. با shared کردن یک حجم، اتصالات انجام‌شده زیر آن حجم درون کانتینر روی میزبان قابل مشاهده خواهد بود و برعکس. با slave کردن یک حجم، انتشار اتصال تنها به‌صورت یک‌طرفه فعال می‌شود؛ بدین معنی که اتصالات انجام‌شده روی میزبان زیر آن حجم در کانتینر قابل مشاهده خواهند بود، اما عکس آن برقرار نیست.

برای کنترل ویژگی انتشار اتصال حجم، می‌توان از فلگ انتشار :[r]shared، :[r]slave یا :[r]private استفاده کرد. ویژگی انتشار تنها برای حجم‌های bind mount شده قابل تعیین است و نه برای حجم‌های داخلی یا حجم‌های نام‌گذاری‌شده. برای کارکرد درست انتشار اتصال، نقطه اتصال مبدأ (نقطه اتصالی که دایرکتوری مبدأ روی آن سوار شده) باید دارای ویژگی‌های انتشار مناسب باشد. برای حجم‌های مشترک (shared)، نقطه اتصال مبدأ باید shared باشد. و برای حجم‌های تابع (slave)، اتصال مبدأ باید shared یا slave باشد.

از دستور df <source-dir> برای پیدا کردن اتصال مبدأ و سپس از دستور findmnt -o TARGET,PROPAGATION <source-mount-dir> برای یافتن ویژگی‌های انتشار اتصال مبدأ استفاده کنید. اگر ابزار findmnt در دسترس نیست، می‌توانید مدخل اتصال مربوط به نقطه اتصال مبدأ را در /proc/self/mountinfo بررسی کنید. به فیلدهای اختیاری نگاه کنید و ببینید آیا ویژگی‌های انتشاری مشخص شده‌اند یا خیر. shared:X به این معنی است که اتصال shared است، master:X بدان معناست که اتصال slave است و اگر چیزی نباشد بدین معناست که اتصال private است.

برای تغییر ویژگی‌های انتشار یک نقطه اتصال، از دستور mount استفاده کنید. برای نمونه، اگر می‌خواهید دایرکتوری مبدأ /foo را bind mount کنید، می‌توانید دستورهای mount --bind /foo /foo و mount --make-private --make-shared /foo را اجرا نمایید. این کار /foo را به یک نقطه اتصال shared تبدیل می‌کند. در روشی دیگر، می‌توانید مستقیماً ویژگی‌های انتشار اتصال مبدأ را تغییر دهید. فرض کنید / اتصال مبدأ برای /foo است، در این صورت از mount --make-shared / برای تبدیل / به یک اتصال shared استفاده کنید.

یادداشت: هنگام استفاده از systemd برای مدیریت شروع و توقف دیمن داکر، در فایل واحد systemd گزینه‌ای برای کنترل انتشار اتصال خود دیمن داکر وجود دارد که MountFlags نامیده می‌شود. مقدار این تنظیم ممکن است باعث شود داکر متوجه تغییرات انتشار اتصال ایجادشده در نقطه اتصال نشود. برای مثال، اگر این مقدار slave باشد، ممکن است نتوانید از انتشار shared یا rshared روی یک حجم استفاده کنید.

برای غیرفعال کردن کپی خودکار داده‌ها از مسیر کانتینر به حجم، از فلگ nocopy استفاده کنید. فلگ nocopy را می‌توان روی حجم‌های نام‌گذاری‌شده تنظیم کرد و برای اتصالات bind اعمال نمی‌شود.

--add-host= افزودن نگاشت سفارشی میزبان به آی‌پی (host:ip)

--annotation=map[] افزودن یادداشت (annotation) به کانتینر (منتقل‌شده به زمان اجرای OCI)

-a, --attach= اتصال به STDIN، STDOUT یا STDERR

--blkio-weight=0 ورودی/خروجی بلوکی (وزن نسبی)، بین 10 تا 1000، یا 0 برای غیرفعال‌سازی (پیش‌فرض 0)

--blkio-weight-device=[] وزن ورودی/خروجی بلوکی (وزن نسبی دستگاه)

--cap-add= افزودن قابلیت‌های لینوکس (Linux capabilities)

--cap-drop= حذف قابلیت‌های لینوکس (Linux capabilities)

--cgroup-parent="" گروه کنترلی (cgroup) والد اختیاری برای کانتینر

--cgroupns="" فضای نام cgroup مورد استفاده (host|private) 'host': اجرای کانتینر در فضای نام cgroup میزبان داکر 'private': اجرای کانتینر در فضای نام cgroup خصوصی خودش '': استفاده از فضای نام cgroup پیکربندی‌شده توسط گزینه default-cgroupns-mode در دیمن (پیش‌فرض)

--cidfile="" نوشتن شناسه کانتینر درون فایل

--cpu-count=0 تعداد پردازنده (تنها در ویندوز)

--cpu-percent=0 درصد پردازنده (تنها در ویندوز)

--cpu-period=0 محدود کردن دوره CFS (زمان‌بند کاملاً منصفانه) پردازنده

--cpu-quota=0 محدود کردن سهمیه CFS (زمان‌بند کاملاً منصفانه) پردازنده

--cpu-rt-period=0 محدود کردن دوره بی‌درنگ (real-time) پردازنده بر حسب میکروثانیه

--cpu-rt-runtime=0 محدود کردن زمان اجرای بی‌درنگ (real-time) پردازنده بر حسب میکروثانیه

-c, --cpu-shares=0 سهم پردازنده (وزن نسبی)

--cpus= تعداد پردازنده‌ها

--cpuset-cpus="" پردازنده‌های مجاز برای اجرا (0-3, 0,1)

--cpuset-mems="" گره‌های حافظه مجاز برای اجرا (0-3, 0,1)

--device= افزودن دستگاه میزبان به کانتینر

--device-cgroup-rule= افزودن یک قانون به فهرست دستگاه‌های مجاز cgroup

--device-read-bps=[] محدود کردن نرخ خواندن (بایت در ثانیه) از یک دستگاه

--device-read-iops=[] محدود کردن نرخ خواندن (ورودی/خروجی در ثانیه) از یک دستگاه

--device-write-bps=[] محدود کردن نرخ نوشتن (بایت در ثانیه) روی یک دستگاه

--device-write-iops=[] محدود کردن نرخ نوشتن (ورودی/خروجی در ثانیه) روی یک دستگاه

--dns= تنظیم کارسازهای DNS سفارشی

--dns-option= تنظیم گزینه‌های DNS

--dns-search= تنظیم دامنه‌های جستجوی DNS سفارشی

--domainname="" نام دامنه NIS کانتینر

--entrypoint="" بازنویسی ENTRYPOINT پیش‌فرض ایمیج

-e, --env= تنظیم متغیرهای محیطی

--env-file= خواندن فایلی از متغیرهای محیطی

--expose= در دسترس قرار دادن (expose) یک درگاه یا محدوده‌ای از درگاه‌ها

--gpus= دستگاه‌های پردازنده گرافیکی (GPU) جهت افزودن به کانتینر ('all' برای ارسال همه GPUها)

--group-add= افزودن گروه‌های اضافی جهت عضویت

--health-cmd="" دستور جهت اجرا برای بررسی وضعیت سلامت

--health-interval=0s فاصله زمانی بین اجرای بررسی (ms|s|m|h) (پیش‌فرض 0s)

--health-retries=0 تعداد شکست‌های پیاپی لازم برای گزارش ناسالم بودن

--health-start-interval=0s فاصله زمانی بین اجرای بررسی در طول دوره راه‌اندازی (ms|s|m|h) (پیش‌فرض 0s)

--health-start-period=0s دوره راه‌اندازی کانتینر برای مقداردهی اولیه قبل از آغاز شمارش معکوس health-retries بر حسب (ms|s|m|h) (پیش‌فرض 0s)

--health-timeout=0s حداکثر زمان مجاز برای اجرای یک بررسی (ms|s|m|h) (پیش‌فرض 0s)

--help[=false] چاپ نحوه استفاده

-h, --hostname="" نام میزبان کانتینر

--init[=false] اجرای یک فرایند init درون کانتینر جهت هدایت سیگنال‌ها و جمع‌آوری فرایندهای زامبی

-i, --interactive[=false] باز نگه داشتن STDIN حتی اگر متصل نباشد

--io-maxbandwidth=0 حداکثر پهنای باند ورودی/خروجی درایو سیستم (تنها در ویندوز)

--io-maxiops=0 حداکثر سقف IOps برای درایو سیستم (تنها در ویندوز)

--ip= آدرس IPv4 (مانند 172.30.100.104)

--ip6= آدرس IPv6 (مانند 2001:db8::33)

--ipc="" حالت IPC مورد استفاده

--isolation="" فناوری جداسازی کانتینر

-l, --label= تنظیم فراداده (metadata) روی یک کانتینر

--label-file= خواندن فایلی از برچسب‌ها که با خط جدا شده‌اند

--link= افزودن پیوند به کانتینری دیگر

--link-local-ip= آدرس‌های پیوند-محلی (link-local) مربوط به IPv4/IPv6 کانتینر

--log-driver="" راه‌انداز ثبت وقایع (log driver) برای کانتینر

--log-opt= گزینه‌های راه‌انداز ثبت وقایع

--mac-address="" آدرس MAC کانتینر (مانند 92:d0:c6:0a:29:33)

-m, --memory=0 محدودیت حافظه

--memory-reservation=0 محدودیت نرم حافظه

--memory-swap=0 حد حافظه مبادله‌ای (swap) برابر با مجموع حافظه به‌علاوه swap؛ مقدار '-1' برای فعال کردن swap نامحدود

--memory-swappiness=-1 تنظیم میزان مبادله حافظه کانتینر (swappiness) از 0 تا 100

--mount= اتصال یک فایل‌سیستم به کانتینر

--name="" اختصاص یک نام به کانتینر

--network= اتصال یک کانتینر به یک شبکه

--network-alias= افزودن نام مستعار در سطح شبکه برای کانتینر

--no-healthcheck[=false] غیرفعال کردن هرگونه HEALTHCHECK تعیین‌شده توسط کانتینر

--oom-kill-disable[=false] غیرفعال کردن کشنده کمبود حافظه (OOM Killer)

--oom-score-adj=0 تنظیم اولویت‌های OOM میزبان (از -1000 تا 1000)

--pid="" فضای نام PID مورد استفاده

--pids-limit=0 تنظیم محدودیت تعداد شناسه‌های فرایند (pids) کانتینر (مقدار -1 برای نامحدود)

--platform="" تنظیم پلتفرم در صورتی که کارساز قابلیت چندپلتفرمی داشته باشد

--privileged[=false] اعطای دسترسی‌های گسترده به این کانتینر

-p, --publish= انتشار درگاه(های) کانتینر روی میزبان

-P, --publish-all[=false] انتشار تمامی درگاه‌های در دسترس به درگاه‌های تصادفی

--pull="missing" دریافت ایمیج پیش از ایجاد ("always"، "missing"، "never")

-q, --quiet[=false] بی‌صدا کردن خروجی دریافت ایمیج

--read-only[=false] سوار کردن فایل‌سیستم ریشه کانتینر به‌صورت فقط‌خواندنی

--restart="no" سیاست راه‌اندازی مجدد هنگام خروج کانتینر

--rm[=false] حذف خودکار کانتینر و حجم‌های ناشناس وابسته به آن پس از خروج

--runtime="" زمان اجرا (runtime) مورد استفاده برای این کانتینر

--security-opt= گزینه‌های امنیتی

--shm-size=0 اندازه مسیر /dev/shm

--stop-signal="" سیگنال متوقف کردن کانتینر

--stop-timeout=0 مهلت زمانی (بر حسب ثانیه) برای متوقف کردن کانتینر

--storage-opt= گزینه‌های راه‌انداز ذخیره‌سازی برای کانتینر

--sysctl=map[] گزینه‌های sysctl

--tmpfs= سوار کردن یک دایرکتوری tmpfs

-t, --tty[=false] تخصیص یک شبه-TTY

--ulimit=[] گزینه‌های ulimit

--use-api-socket[=false] سوار کردن سوکت Docker API و احراز هویت لازم به‌صورت bind mount

-u, --user="" نام کاربری یا شناسه کاربری UID (قالب: <name|uid>[:<group|gid>])

--userns="" فضای نام کاربر مورد استفاده

--uts="" فضای نام UTS مورد استفاده

-v, --volume= سوار کردن یک حجم به‌صورت bind mount

--volume-driver="" راه‌انداز حجم اختیاری برای کانتینر

--volumes-from= سوار کردن حجم‌ها از کانتینر(های) مشخص‌شده

-w, --workdir="" دایرکتوری کاری درون کانتینر

این گزینه در مواردی کاربرد دارد که کانتینرهای داکر را روی ویندوز اجرا می‌کنید. گزینه --isolation=<value> فناوری جداسازی کانتینر را تنظیم می‌کند. در لینوکس، تنها گزینه پشتیبانی‌شده default است که از فضاهای نام لینوکس استفاده می‌کند. در مایکروسافت ویندوز، می‌توانید این مقادیر را مشخص کنید:

  • default: استفاده از مقدار مشخص‌شده توسط گزینه --exec-opt در دیمن داکر. اگر دیمن فناوری جداسازی را مشخص نکرده باشد، مایکروسافت ویندوز از process به‌عنوان مقدار پیش‌فرض استفاده می‌کند.
  • process: تنها جداسازی با فضای نام.
  • hyperv: جداسازی مبتنی بر پارتیشن هایپروایزر Hyper-V.

دستگاه‌های در دسترس یک کانتینر در زمان ایجاد آن اختصاص می‌یابند. دستگاه‌های اختصاص‌یافته هم به فایل cgroup.allow اضافه می‌شوند و هم پس از اجرای کانتینر درون آن ایجاد می‌گردند. این موضوع زمانی که دستگاه جدیدی باید به یک کانتینر در حال اجرا اضافه شود، مشکلی ایجاد می‌کند.

یکی از راه‌حل‌ها، افزودن قانونی با سطح دسترسی بیشتر به کانتینر است که به آن امکان دسترسی به دامنه وسیع‌تری از دستگاه‌ها را می‌دهد. برای مثال، با فرض اینکه کانتینر ما نیاز به دسترسی به یک دستگاه نویسه‌ای (character device) با شماره ماژور 42 و هر شماره مینوری دارد (که با ظهور دستگاه‌های جدید افزوده می‌شوند)، قانون زیر اضافه خواهد شد:

$ docker create --device-cgroup-rule='c 42:* rmw' --name my-container my-image

سپس، کاربر می‌تواند از udev بخواهد اسکریپتی را اجرا کند که هنگام اضافه شدن دستگاه، دستور docker exec my-container mknod newDevX c 42 <minor> را برای دستگاه مورد نیاز اجرا نماید.

یادداشت: دستگاه‌های اولیه حاضر همچنان باید به‌طور صریح به دستور create/run اضافه شوند.

docker-container(1)

Aug 2026 Docker Community