| podman-exec(1) | General Commands Manual | podman-exec(1) |
نام (NAME)
podman-exec - اجرای فرآیند در کانتینر در حال اجرا
خلاصه دستور (SYNOPSIS)
podman exec [گزینهها] کانتینر دستور [آرگومان ...]
podman container exec [گزینهها] کانتینر دستور [آرگومان ...]
توضیحات (DESCRIPTION)
دستور podman exec فرمانی را در یک کانتینر در حال اجرا اجرا میکند.
گزینهها (OPTIONS)
--cidfile=file
شناسه (ID) کانتینر هدف را از file مشخصشده میخواند.
--detach, -d
نشست exec را آغاز میکند، اما به آن متصل نمیشود. دستور در پسزمینه اجرا میشود و نشست exec پس از تکمیل، بهطور خودکار حذف میگردد. دستور podman exec شناسهٔ نشست exec را چاپ کرده و بلافاصله پس از شروع خارج میشود.
--detach-keys=sequence
توالی کلید را برای جدا شدن از کانتینر مشخص میکند. قالب آن یک تکنویسهٔ [a-Z] یا یک یا چند نویسهٔ ctrl-<value> است که در آن <value> یکی از این موارد است: a-z، @، ^، [، , یا _. مشخص کردن "" این قابلیت را غیرفعال میکند. مقدار پیشفرض ctrl-p,ctrl-q است.
این گزینه را میتوان در فایل containers.conf(5) نیز تنظیم کرد.
--env, -e=env
متغیرهای محیطی را تنظیم میکند.
این گزینه امکان تعریف متغیرهای محیطی دلخواه را که برای فرآیند راهاندازیشده درون کانتینر در دسترس خواهند بود، فراهم میکند. اگر متغیر محیطی بدون مقدار مشخص شود، Podman محیط میزبان را برای یافتن مقدار بررسی کرده و متغیر را تنها در صورتی تنظیم میکند که روی میزبان مقداردهی شده باشد. به عنوان یک حالت ویژه، اگر یک متغیر محیطیِ خاتمهیافته به * بدون مقدار مشخص شود، Podman متغیرهای آغازشونده با آن پیشوند را در محیط میزبان جستجو کرده و آن متغیرها را به کانتینر اضافه میکند.
--env-file=file
یک فایل خطبهخط از متغیرهای محیطی را میخواند.
--interactive, -i
در صورت تنظیم روی true، ورودی استاندارد (stdin) را در دسترس فرآیند درون کانتینر قرار میدهد. در صورت تنظیم روی false، ورودی استاندارد فرآیند درون کانتینر خالی بوده و بلافاصله بسته میشود.
در صورت اتصال (attached)، ورودی استاندارد (stdin) به فرآیند درون کانتینر هدایت (pipe) میشود. در صورت جدا بودن (detached)، خواندن از stdin مسدود (block) خواهد شد تا زمانی که بعداً متصل گردد.
هشدار: برنامه Podman به محض در دسترس قرار گرفتن ورودی از stdin، آن را مصرف میکند، حتی اگر فرآیند درون کانتینر آن را درخواست نکرده باشد.
--latest, -l
بهجای وارد کردن نام یا شناسهٔ کانتینر، از آخرین کانتینر ایجادشده استفاده میکند. نکته: آخرین کانتینر راهاندازیشده میتواند از سایر کاربران Podman روی ماشین میزبان باشد. (این گزینه در کلاینت ریموت Podman، از جمله ماشینهای Mac و Windows (بهاستثنای WSL2) در دسترس نیست)
--no-session
برای فرآیند exec یک نشست پایگاهداده ایجاد نمیکند. این کار میتواند کارایی را بهبود بخشد، اما نشست exec برای سایر دستورات podman قابل مشاهده نخواهد بود.
--preserve-fd=FD1[,FD2,...]
توصیفکنندههای فایل (file descriptors) اضافی مشخصشده در فهرست جداشده با کاما را به فرآیند منتقل میکند. این گزینه را میتوان چندین بار مشخص کرد. این گزینه فقط با زمان اجرای OCI موسوم به crun پشتیبانی میشود. استفاده از این گزینه با سایر زمانهای اجرای OCI ممکن است یک خطر امنیتی باشد.
(این گزینه در کلاینت ریموت Podman، از جمله ماشینهای Mac و Windows (بهاستثنای WSL2) در دسترس نیست)
--preserve-fds=N
تعداد N توصیفکنندهٔ فایل اضافی (علاوه بر 0، 1 و 2) را به فرآیند منتقل میکند. تعداد کل FDها برابر با 3+N خواهد بود. (این گزینه در کلاینت ریموت Podman، از جمله ماشینهای Mac و Windows (بهاستثنای WSL2) در دسترس نیست)
--privileged
امتیازات گستردهای به این کانتینر اعطا میکند. مقدار پیشفرض false است.
بهطور پیشفرض، کانتینرهای Podman بدون امتیاز (=false) هستند و برای مثال نمیتوانند بخشهایی از سیستمعامل را تغییر دهند. این بدان دلیل است که بهطور پیشفرض به کانتینر تنها دسترسی محدودی به دستگاهها داده میشود. به یک کانتینر «دارای امتیاز» (privileged) همان سطح دسترسی به دستگاهها داده میشود که کاربر راهاندازیکننده کانتینر دارد، به استثنای کنسولهای مجازی (/dev/tty\d+) هنگام اجرا در حالت systemd (--systemd=always).
یک کانتینر دارای امتیاز، ویژگیهای امنیتی را که کانتینر را از میزبان ایزوله میکنند غیرفعال میسازد. قابلیتهای حذفشده (dropped capabilities)، دستگاههای محدودشده، نقاط اتصال فقطخواندنی، تفکیک Apparmor/SELinux و فیلترهای Seccomp همگی غیرفعال میشوند. با توجه به غیرفعال شدن ویژگیهای امنیتی، فیلد privileged تقریباً هرگز نباید تنظیم شود چرا که کانتینرها میتوانند به راحتی از حصار امنیتی خارج شوند.
کانتینرهایی که در فضاینام کاربری (user namespace) اجرا میشوند (مانند کانتینرهای بدون ریشه یا rootless)، نمیتوانند امتیازاتی فراتر از کاربری که آنها را راهاندازی کرده داشته باشند.
--tty, -t
یک شبهترمینال (pseudo-TTY) اختصاص میدهد. مقدار پیشفرض false است.
هنگامی که روی true تنظیم شود، Podman یک pseudo-tty اختصاص داده و به ورودی استاندارد کانتینر متصل میشود. از این قابلیت میتوان برای مثال جهت اجرای یک پوستهٔ تعاملی یکبارمصرف استفاده کرد.
نکته: فلگ --tty از تغییر مسیر خروجی استاندارد جلوگیری میکند. این فلگ STDOUT و STDERR را با هم ترکیب میکند، میتواند نویسههای کنترلی درج کند و ممکن است باعث قفل شدن پایپها (pipes) شود. این گزینه فقط هنگام اجرای تعاملی در ترمینال کاربرد دارد. هنگام ارسال ورودی به Podman، فقط از -i استفاده کنید، نه -it.
--user, -u=user[:group]
نام کاربری یا UID مورد استفاده و بهصورت اختیاری نام گروه یا GID را برای دستور مشخصشده تنظیم میکند. هر دو مقدار user و group میتوانند نمادین یا عددی باشند.
بدون این آرگومان، دستور با کاربری که در ایمیج کانتینر مشخص شده اجرا میشود. این کاربر بهطور کلی پیشفرض root است، مگر اینکه با دستور USER در Containerfile یا با مقداری که به این گزینه داده میشود لغو (override) شده باشد.
هنگامی که از فضاینام کاربری (user namespace) استفاده نمیشود، UID و GID مورد استفاده درون کانتینر با میزبان مطابقت دارند. با این حال، هنگام استفاده از فضاهای نام کاربری، UID و GID درون کانتینر ممکن است متناظر با UID و GID دیگری در میزبان باشند. برای مثال در کانتینرهای بدون ریشه (rootless)، همیشه از فضاینام کاربری استفاده میشود و کاربر root در کانتینر بهطور پیشفرض با UID و GID کاربری که Podman را فراخوانی کرده مطابقت دارد.
--workdir, -w=dir
دایرکتوری کاری درون کانتینر.
دایرکتوری کاری پیشفرض برای اجرای فایلهای اجرایی باینری درون کانتینر، دایرکتوری ریشه (/) است. توسعهدهندهٔ ایمیج میتواند با دستورالعمل WORKDIR پیشفرض متفاوتی را تنظیم کند. مجری (اپراتور) میتواند با استفاده از گزینهٔ -w دایرکتوری کاری را بازنویسی کند.
وضعیت خروج (EXIT STATUS)
کد خروج از podman exec اطلاعاتی درباره دلیل عدم موفقیت دستور در اجرا یا چرایی خروج آن از کانتینر ارائه میدهد. هنگامی که podman exec با یک کد غیر صفر خارج میشود، کدهای خروج از استاندارد chroot پیروی میکنند؛ به موارد زیر مراجعه کنید:
125 خطا از خود Podman است
$ podman exec --foo ctrID /bin/sh; echo $? Error: unknown flag: --foo 125
126 دستور درون کانتینر قابل فراخوانی نیست
$ podman exec ctrID /etc; echo $? Error: container_linux.go:346: starting container process caused "exec: \"/etc\": permission denied": OCI runtime error 126
127 دستور درون کانتینر یافت نمیشود
$ podman exec ctrID foo; echo $? Error: container_linux.go:346: starting container process caused "exec: \"foo\": executable file not found in $PATH": OCI runtime error 127
Exit code کد خروج دستور درون کانتینر
$ podman exec ctrID /bin/sh -c 'exit 3'; echo $? 3
مثالها (EXAMPLES)
اجرای دستور در کانتینر انتخابشده با اختصاص stdin و tty:
$ podman exec -it ctrID ls
اجرای دستور با دایرکتوری کاری لغوشده در کانتینر انتخابشده با اختصاص stdin و tty:
$ podman exec -it -w /tmp myCtr pwd
اجرای دستور با کاربر مشخصشده در کانتینر انتخابشده:
$ podman exec --user root ctrID ls
اجرای دستور بدون اتصال به نشست exec، به طوری که دستور در پسزمینه در حال اجرا بماند:
$ podman exec -d ctrID find /path/to/search -name yourfile
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
دسامبر ۲۰۱۷، در ابتدا توسط Brent Baude به نشانی bbaude@redhat.com گردآوری شد ⟨mailto:bbaude@redhat.com⟩