podman-auto-update(1) General Commands Manual podman-auto-update(1)

podman-auto-update - به‌روزرسانی خودکار کانتینرها بر اساس خط‌مشی به‌روزرسانی خودکار آن‌ها

podman auto-update [گزینه‌ها]

دستور podman auto-update ایمیج‌های جدید کانتینر را دریافت کرده و کانتینرهایی را که برای به‌روزرسانی خودکار پیکربندی شده‌اند مجدداً راه‌اندازی می‌کند. برای استفاده از قابلیت به‌روزرسانی خودکار، کانتینر یا بارهای کاری کوبرنتیز باید درون یک واحد systemd اجرا شوند. پس از به‌روزرسانی موفقیت‌آمیز یک ایمیج، کانتینرهایی که از آن ایمیج استفاده می‌کنند با راه‌اندازی مجدد واحدهای systemd که در آن‌ها اجرا می‌شوند، به‌روزرسانی خواهند شد. لطفاً برای نحوه اجرای پادمن تحت systemd به podman-systemd.unit(5) مراجعه کنید.

برای پیکربندی یک کانتینر جهت به‌روزرسانی خودکار، کانتینر باید با برچسب io.containers.autoupdate یا فیلد AutoUpdate در podman-systemd.unit(5) با یکی از دو مقدار زیر ایجاد شود:

  • registry: اگر این برچسب وجود داشته باشد و روی registry تنظیم شده باشد، پادمن با رجیستری مربوطه تماس می‌گیرد تا بررسی کند آیا ایمیج به‌روزرسانی شده است یا خیر. برچسب image جایگزینی برای registry است که جهت سازگاری با نسخه‌های پیشین حفظ شده است. یک ایمیج در صورتی به‌روزرسانی‌شده تلقی می‌شود که دایجست آن در ذخیره‌ساز محلی با دایجست ایمیج از راه دور متفاوت باشد. اگر ایمیجی باید به‌روزرسانی شود، پادمن آن را دریافت کرده و واحد systemd مجری کانتینر را مجدداً راه‌اندازی می‌کند. خط‌مشی رجیستری نیازمند استفاده از یک ارجاع کامل ایمیج (fully-qualified، مانند quay.io/podman/stable:latest) برای ساخت کانتینر است. این الزام برای این است که مشخص شود دقیقاً کدام ایمیج باید بررسی و دریافت شود. اگر از شناسه ایمیج استفاده می‌شد، پادمن دیگر نمی‌دانست کدام ایمیج را بررسی یا دریافت کند.
  • local: اگر برچسب autoupdate روی local تنظیم شود، پادمن دایجست ایمیج کانتینر را با دایجست موجود در ذخیره‌ساز کانتینر محلی مقایسه می‌کند. اگر متفاوت باشند، ایمیج محلی جدیدتر تلقی شده و واحد systemd مجدداً راه‌اندازی می‌شود.

پادمن از به‌روزرسانی خودکار برای بارهای کاری کوبرنتیز پشتیبانی می‌کند. خط‌مشی به‌روزرسانی خودکار را می‌توان مستقیماً از طریق podman-systemd.unit(5) یا در داخل YAML کوبرنتیز با حاشیه‌نویسی‌های مخصوص پادمن که در ادامه ذکر شده، پیکربندی کرد:

  • io.containers.autoupdate: مقدار "registry|local" برای اعمال خط‌مشی به‌روزرسانی خودکار به تمام کانتینرها
  • io.containers.autoupdate/$container: مقدار "registry|local" برای اعمال خط‌مشی به‌روزرسانی خودکار تنها به $container
  • io.containers.sdnotify: مقدار "conmon|container" برای اعمال خط‌مشی sdnotify به تمام کانتینرها
  • io.containers.sdnotify/$container: مقدار "conmon|container" برای اعمال خط‌مشی sdnotify تنها به $container

به‌طور پیش‌فرض، خط‌مشی autoupdate روی "disabled" و خط‌مشی sdnotify روی "conmon" تنظیم شده است.

پادمن همراه با یک واحد systemd به نام podman-auto-update.service ارائه می‌شود. این واحد روزانه در نیمه‌شب توسط تایمر systemd با نام podman-auto-update.timer فعال می‌شود. در صورت تمایل می‌توان این تایمر را برای به‌روزرسانی‌های سفارشی مبتنی بر زمان تغییر داد. همچنین این واحد می‌تواند توسط سایر واحدهای systemd (مثلاً از طریق درخت وابستگی) یا به صورت دستی با دستور systemctl start podman-auto-update.service فراخوانی شود.

مسیر فایل احراز هویت. پیش‌فرض در لینوکس ${XDG_RUNTIME_DIR}/containers/auth.json و در ویندوز/مک‌او‌اس $HOME/.config/containers/auth.json است. این فایل توسط podman login ایجاد می‌شود. اگر وضعیت احراز هویت در آنجا یافت نشود، $HOME/.docker/config.json که با docker login تنظیم می‌شود، بررسی خواهد شد.

نکته: همچنین این گزینه وجود دارد که با تنظیم متغیر محیطی REGISTRY_AUTH_FILE مسیر پیش‌فرض فایل احراز هویت بازنویسی شود. این کار با دستور export REGISTRY_AUTH_FILE=path امکان‌پذیر است.

به عنوان روش دیگر، می‌توان برچسب کانتینر io.containers.autoupdate.authfile را پیکربندی کرد. در این صورت، پادمن از مقدار برچسب مشخص‌شده استفاده خواهد کرد.

بررسی در دسترس بودن ایمیج‌های جدید بدون انجام هیچ‌گونه عملیات دریافت یا راه‌اندازی مجدد سرویس یا کانتینر. فیلد UPDATED در دسترس بودن ایمیج جدید را با وضعیت "pending" نشان می‌دهد.

تغییر قالب خروجی پیش‌فرض. این مقدار می‌تواند نوعی پشتیبانی‌شده مانند 'json' یا یک قالب Go باشد. جای‌نگهدارهای معتبر برای قالب Go در زیر فهرست شده‌اند:

جای‌نگهدار توضیحات
.Container شناسه و نام کانتینر
.ContainerID شناسه کانتینر
.ContainerName نام کانتینر
.Image نام ایمیج
.Policy خط‌مشی به‌روزرسانی خودکار کانتینر
.Unit نام واحد systemd
.Updated وضعیت به‌روزرسانی: true، false، failed، pending

اگر راه‌اندازی مجدد یک واحد systemd پس از به‌روزرسانی ایمیج با شکست مواجه شود، به ایمیج قبلی بازگردانی (rollback) انجام شده و واحد یک بار دیگر راه‌اندازی مجدد می‌شود. مقدار پیش‌فرض true است.

توجه داشته باشید که تشخیص شکست یک واحد systemd به بهترین نحو زمانی انجام می‌شود که کانتینر پیام READY را از طریق SDNOTIFY ارسال کند. به این ترتیب، راه‌اندازی مجدد واحد منتظر دریافت این پیام مانده یا مهلت زمانی (timeout) فرا می‌رسد. بدون آن، راه‌اندازی مجدد واحد systemd ممکن است با موفقیت ثبت شود، حتی اگر کانتینر اندکی پس از آن با شکست مواجه شده باشد.

برای اینکه یک کانتینر پیام READY را از طریق SDNOTIFY ارسال کند، باید با گزینه --sdnotify=container ایجاد شود (به podman-run(1) مراجعه کنید). برنامه‌ای که درون کانتینر اجرا می‌شود می‌تواند در زمان آماده بودن دستور systemd-notify --ready را اجرا کند یا از بایندرهای sdnotify زبان برنامه‌نویسی خاص (مانند sd_notify(3)) استفاده نماید.

الزام HTTPS و تایید گواهی‌ها هنگام ارتباط با رجیستری‌ها (پیش‌فرض: true). اگر به صراحت روی true تنظیم شود، اعتبارسنجی TLS اعمال می‌شود. اگر روی false تنظیم شود، اعتبارسنجی TLS اعمال نمی‌شود. اگر مشخص نشده باشد، اعتبارسنجی TLS استفاده می‌شود مگر اینکه رجیستری هدف در containers-registries.conf(5) به عنوان یک رجیستری ناامن ذکر شده باشد.

ایجاد یک فایل Quadlet پیکربندی‌شده برای به‌روزرسانی‌های خودکار:

$ cat ~/.config/containers/systemd/sleep.container
[Container]
Image=registry.fedoraproject.org/fedora:latest
Exec=sleep infinity
AutoUpdate=registry

تولید یک سرویس systemd از فایل Quadlet با بارگذاری مجدد دیمن کاربری systemd:

$ systemctl --user daemon-reload

شروع سرویس systemd و اطمینان از در حال اجرا بودن کانتینر:

$ systemctl --user start sleep.service
$ podman ps
CONTAINER ID  IMAGE                                     COMMAND         CREATED        STATUS        PORTS       NAMES
f8e4759798d4  registry.fedoraproject.org/fedora:latest  sleep infinity  2 seconds ago  Up 2 seconds              systemd-sleep

بررسی در دسترس بودن ایمیج جدید از طریق --dry-run:

$ podman auto-update --dry-run --format "{{.Image}} {{.Updated}}"
registry.fedoraproject.org/fedora:latest   pending

به‌روزرسانی سرویس:

$ podman auto-update
UNIT           CONTAINER                     IMAGE                                     POLICY      UPDATED
sleep.service  f8e4759798d4 (systemd-sleep)  registry.fedoraproject.org/fedora:latest  registry    true

podman(1), podman-generate-systemd(1), podman-run(1), podman-systemd.unit(5), sd_notify(3), systemd.unit(5)