نکات کلیدی
- پس از reload، تنظیم mirror را با docker info کنترل کنید و سپس یک ایمیج آزمایشی دریافت کنید.
- سپس یک مسیر میرور قابل اتکا تعریف کنید، daemon.json را بدون حذف گزینه های قبلی ویرایش کنید و تنظیم مؤثر را از Docker بررسی کنید.
- نسخه آفلاین ایمیج ها را به ماشین آزمایشی منتقل کنید، آن ها را بارگذاری کنید و سرویس را با همان فایل های پیکربندی اجرا کنید.
خطای 403 داکر هنگام دریافت ایمیج از Docker Hub روی بعضی سرورهای ایران میتواند پیش از شروع دانلود و در مرحله پاسخ رجیستری رخ دهد. برای عیبیابی، ابتدا باید آن را از خطاهای احراز هویت و محدودیت تعداد درخواستها جدا کرد. سپس میتوان مسیر دریافت ایمیج را از طریق یک registry mirror تنظیم کرد، صحت محتوای دریافتشده را سنجید و برای ایمیجهای حیاتی نسخه محلی نگه داشت.
تفاوت خطای 403 با محدودیت نرخ درخواست
کد 403 نشان میدهد درخواست از سوی سرویس رد شده است؛ در سناریوی محدودیت جغرافیایی، IP مبدأ میتواند در تصمیم سرویس اثر داشته باشد. در مقابل، پاسخ 429 معمولاً به عبور از سهمیه درخواست یا pull اشاره دارد. این دو وضعیت راهحل یکسانی ندارند: تغییر مسیر رجیستری ممکن است برای دسترسی مفید باشد، اما مدیریت تعداد pull و احراز هویت برای محدودیت نرخ اهمیت دارد.
پیش از تغییر تنظیمات Docker، پیام کامل خطا و پاسخ endpoint رجیستری را ثبت کنید. بررسی endpoint استاندارد /v2/ میتواند نشان دهد رجیستری در دسترس است، احراز هویت میخواهد یا درخواست را رد میکند. خطای نام ایمیج، مشکل DNS، قطع ارتباط TLS و محدودیت سرویس را با هم اشتباه نگیرید؛ هر کدام نشانه و مسیر بررسی متفاوتی دارند.
Registry Mirror چگونه کار میکند؟
میرور رجیستری واسطهای است که درخواست دریافت ایمیج را از طرف Docker پیگیری میکند و در صورت وجود نسخه کششده، آن را تحویل میدهد. در غیر این صورت ممکن است نسخه موردنیاز را از رجیستری اصلی دریافت کند. تنظیم mirror در سطح daemon باعث میشود درخواستهای مربوط به Docker Hub از مسیر تعریفشده عبور کنند، بدون آنکه لازم باشد نام همه ایمیجها در فایلهای استقرار تغییر کند.
آدرس میرور را فقط از ارائهدهندهای انتخاب کنید که سیاست نگهداری، پایداری و نحوه بهروزرسانی آن برایتان روشن باشد. یک نشانی عمومی در اینترنت بهتنهایی تضمینکننده اصالت یا دسترسپذیری نیست. برای سرویسهای عملیاتی، استفاده از کش داخلی سازمان یا رجیستری خصوصی کنترل بیشتری بر دسترسی، نسخهها و نگهداری ایمیجها ایجاد میکند.
پیکربندی daemon.json بدون حذف تنظیمات قبلی
فایل پیکربندی سراسری Docker در لینوکس معمولاً در مسیر /etc/docker/daemon.json قرار دارد. اگر فایل از قبل وجود دارد، آن را با یک محتوای تازه جایگزین نکنید؛ ممکن است گزینههایی مانند data-root، log-driver یا تنظیمات شبکه در آن ذخیره شده باشد. ابتدا نسخه پشتیبان بگیرید و کلید registry-mirrors را به ساختار JSON موجود اضافه کنید.
پس از ویرایش، ساختار JSON را اعتبارسنجی کنید. یک ویرگول اضافه، نقلقول ناقص یا قرارگرفتن آرایه در سطح اشتباه میتواند مانع بارگذاری تنظیمات شود. سپس از روش reload پشتیبانیشده در نسخه و سرویس نصبشده استفاده کنید و نتیجه را در خروجی docker info بررسی کنید. بخش Registry Mirrors باید آدرس موردنظر را نمایش دهد.
اگر سرویس Docker با گزینههای خط فرمان اجرا شده باشد، ممکن است بعضی تنظیمات فایل با آرگومانهای daemon تعارض داشته باشند. در این حالت فایل systemd و پارامترهای اجرای dockerd را هم بررسی کنید. پس از هر تغییر، فقط به نبود پیام خطا اکتفا نکنید؛ مقدار مؤثر تنظیم را از خود daemon بخوانید.
اعمال تغییر با حداقل اختلال در کانتینرها
راهاندازی مجدد daemon ممکن است بر کانتینرهای در حال اجرا اثر بگذارد؛ رفتار دقیق به تنظیمات سرویس و قابلیتهایی مانند live-restore بستگی دارد. اگر نسخه Docker و گزینه موردنظر امکان بارگذاری مجدد را پشتیبانی میکنند، reload میتواند از توقف غیرضروری سرویس جلوگیری کند. پیش از اعمال تغییر در محیط تولید، روش پشتیبانیشده همان نسخه را بررسی و در بازه نگهداری آزمایش کنید.
پس از reload، تنظیم mirror را با docker info کنترل کنید و سپس یک ایمیج آزمایشی دریافت کنید. اگر Docker همچنان به مسیر قبلی میرود، تنظیمات daemon، آرگومانهای systemd و صحت فایل JSON را دوباره بررسی کنید. خطاهای TLS یا DNS را نیز از مشکل دسترسی رجیستری جدا نگه دارید.
اعتبارسنجی ایمیج با digest
برچسبهایی مانند latest یا حتی یک شماره نسخه ممکن است در زمانهای مختلف به محتوای متفاوتی اشاره کنند. برای استقرار قابل تکرار، digest ایمیج را ثبت کنید و آن را با مرجع قابل اعتماد پروژه تطبیق دهید. digest شناسه محتوایی ایمیج است و امکان میدهد نسخه دقیقتری از آنچه اجرا میشود مشخص باشد.
برای محیط حساس، ایمیج را ابتدا در محیط آزمایشی دریافت و اجرا کنید. نام رجیستری، نام مخزن، معماری پردازنده و digest را در فرایند استقرار ثبت کنید. اگر ایمیج از میرور ناشناخته دریافت شده است، آن را صرفاً به دلیل موفقیت دانلود وارد محیط اصلی نکنید؛ صحت محتوا و منبع انتشار باید بررسی شود.
کش و نگهداری نسخه آفلاین
اگر چند سرور یک ایمیج مشترک را دریافت میکنند، کش داخلی یا رجیستری خصوصی میتواند تکرار دانلود از اینترنت را کاهش دهد. برای سرویسهای حیاتی، نسخه مشخص ایمیج را روی زیرساخت داخلی نگه دارید و فرآیند بهروزرسانی آن را کنترل کنید. این روش در زمان اختلال مسیر بیرونی کمک میکند سرویسهای جدید یا بازیابیشده به دریافت فوری از رجیستری عمومی وابسته نباشند.
برای تهیه نسخه قابل انتقال میتوان ایمیج را با ابزارهای Docker ذخیره و در محیط مقصد بارگذاری کرد. فایل خروجی را در فضای امن نگه دارید، digest و برچسب آن را همراه فایل ثبت کنید و دورهای بازیابی آن را آزمایش کنید. نگهداری فایل بدون آزمون import، تضمین نمیکند در زمان نیاز قابل استفاده باشد.
مقایسه روشهای دسترسی به ایمیج
| روش | کاربرد | نکته مدیریتی |
|---|---|---|
| Registry mirror | تغییر مسیر دریافت از Docker Hub | وابستگی به کیفیت و سیاست میرور |
| رجیستری خصوصی | مدیریت نسخهها و دسترسی سازمانی | نیازمند نگهداری، فضای ذخیرهسازی و کنترل دسترسی |
| کش داخلی | کاهش دانلودهای تکراری | سیاست پاکسازی و ظرفیت دیسک لازم است |
| نسخه آفلاین | بازیابی در زمان قطعی مسیر بیرونی | باید digest و تاریخ تهیه ثبت شود |
پرسشهای متداول
آیا خطای 403 همان خطای toomanyrequests است؟
خیر. 403 ردشدن درخواست است و میتواند به سیاست دسترسی مربوط باشد؛ 429 معمولاً به محدودیت تعداد درخواست یا pull اشاره میکند. متن کامل پاسخ را بررسی کنید.
آیا تغییر daemon.json کانتینرهای در حال اجرا را متوقف میکند؟
صرف ویرایش فایل اثری ندارد. هنگام اعمال تغییر، رفتار به روش reload یا restart، نسخه Docker و تنظیمات live-restore وابسته است. پیش از تغییر در محیط اصلی آن را آزمایش کنید.
چرا پس از تنظیم میرور هنوز دانلود انجام نمیشود؟
آدرس میرور، JSON، دسترسی شبکه، گواهی TLS و آرگومانهای اجرای daemon را بررسی کنید. سپس خروجی docker info را برای مشاهده تنظیم مؤثر بخوانید.
چطور از اصالت ایمیج مطمئن شویم؟
digest نسخه دریافتشده را با digest مرجع پروژه یا منبع انتشار قابل اعتماد تطبیق دهید و ایمیج را پیش از ورود به محیط تولید آزمایش کنید.
آیا رجیستری خصوصی بهتر از میرور عمومی است؟
برای سازمانی که به کنترل نسخه، دسترسی و نگهداری نیاز دارد، رجیستری خصوصی یا کش داخلی کنترل بیشتری فراهم میکند؛ در مقابل، راهاندازی و نگهداری آن نیز بر عهده تیم فنی است.
جمعبندی
برای رفع اختلال دریافت ایمیج، ابتدا نوع پاسخ رجیستری را تشخیص دهید و 403 را با 429 یا خطای شبکه یکی ندانید. سپس یک مسیر میرور قابل اتکا تعریف کنید، daemon.json را بدون حذف گزینههای قبلی ویرایش کنید و تنظیم مؤثر را از Docker بررسی کنید. در محیط عملیاتی، digest ایمیجها را ثبت کنید و برای اجزای حیاتی کش یا نسخه آفلاین نگه دارید تا فرآیند استقرار به یک مسیر دانلود وابسته نماند.
استفاده از رجیستری خصوصی در تیمهای چندسروری
وقتی چند محیط توسعه، آزمون و تولید به یک مجموعه ایمیج نیاز دارند، رجیستری خصوصی امکان مدیریت نسخه و سطح دسترسی را فراهم میکند. تیم میتواند ایمیج را یک بار دریافت کند، آن را پس از بررسی در مخزن داخلی قرار دهد و سرورها را از همان منبع تغذیه کند. این مدل وابستگی به دسترسی مستقیم هر ماشین به رجیستری عمومی را کاهش میدهد.
برای رجیستری داخلی، گواهی TLS، حسابهای مجزا و سیاست دسترسی مخزنها را تنظیم کنید. دسترسی نوشتن را فقط به فرایند ساخت ایمیج بدهید و سرورهای عملیاتی را تا حد امکان به دسترسی خواندن محدود کنید. برای نسخههای منتشرشده، برچسب تغییرناپذیر یا digest ثبت کنید تا بهروزرسانی ناخواسته یک tag باعث تغییر محیط تولید نشود.
برنامه بهروزرسانی ایمیجها
ایمیج پایه و بستههای داخل آن باید در چرخه نگهداری قرار بگیرند. بهروزرسانی خودکار و بدون آزمون ممکن است تغییر ناسازگار وارد سرویس کند؛ از طرف دیگر، نگهداشتن طولانی نسخههای قدیمی نیز ریسک امنیتی دارد. نسخه جدید را در محیط آزمون بسازید، تستهای کاربردی و امنیتی را اجرا کنید و سپس آن را با شناسه مشخص به تولید منتقل کنید.
در زمان انتشار، امکان بازگشت به نسخه قبلی را حفظ کنید. ثبت digest نسخه فعلی، فایل پیکربندی استقرار و وابستگیهای سرویس، بازگشت را سادهتر میکند. اگر ایمیج قبلی از رجیستری حذف شده باشد، داشتن کش یا نسخه آفلاین میتواند از توقف طولانی سرویس جلوگیری کند.
چکلیست امنسازی مسیر دریافت ایمیج
- آدرس میرور یا رجیستری خصوصی را از منبع مشخص و قابل اعتماد انتخاب کنید.
- گواهی TLS و نام دامنه رجیستری را بررسی کنید.
- digest نسخههای حساس را ثبت و با مرجع انتشار تطبیق دهید.
- دسترسی push و pull را با حداقل سطح مجوز تعریف کنید.
- برای ایمیجهای حیاتی نسخه محلی و برنامه بازیابی داشته باشید.
- فضای کش و سیاست پاکسازی ایمیجهای قدیمی را پایش کنید.
- تغییر daemon را ابتدا در محیط غیرعملیاتی آزمایش کنید.
عیبیابی DNS و TLS در مسیر رجیستری
اگر تنظیم میرور درست به نظر میرسد اما اتصال برقرار نمیشود، ابتدا نام دامنه را resolve کنید و سپس اتصال TCP و اعتبار گواهی را بسنجید. اختلاف ساعت سیستم نیز میتواند اعتبارسنجی گواهی را مختل کند. در شبکههایی که پراکسی خروجی دارند، تنظیم پراکسی برای daemon ممکن است با تنظیم پراکسی shell کاربر متفاوت باشد؛ هر دو محیط را جداگانه بررسی کنید.
همچنین فضای دیسک Docker را کنترل کنید. گاهی دریافت ایمیج آغاز میشود اما به دلیل کمبود فضا یا خطای نوشتن لایهها کامل نمیشود. وضعیت storage driver، فضای پارتیشن و لاگ daemon را بررسی کنید تا مشکل ذخیرهسازی با اختلال رجیستری اشتباه گرفته نشود.
کنترل دسترسی به رجیستری و زنجیره ساخت نرمافزار
ایمیج کانتینر بخشی از زنجیره تأمین نرمافزار است؛ بنابراین منبع دریافت و هویت منتشرکننده باید در فرایند ساخت و استقرار ثبت شود. دسترسی به مخزن را بر اساس نقش تفکیک کنید: توسعهدهنده ممکن است اجازه push به مخزن آزمایشی داشته باشد، اما انتشار نسخه عملیاتی باید از مسیر کنترلشده انجام شود. توکنهای دسترسی را در متغیرهای امن نگه دارید و از قرار دادن آنها در فایل Dockerfile یا مخزن کد خودداری کنید.
برای ایمیجهای پایه، نسخه مشخص و قابل تکرار انتخاب کنید. استفاده از tag شناور در زمان build میتواند باعث شود دو build یکسان در روزهای متفاوت محتوای متفاوتی دریافت کنند. ثبت digest و نسخه پایه در مستندات انتشار، امکان بازسازی و بررسی تغییرات را افزایش میدهد.
پاکسازی کش و مدیریت فضای دیسک
کش رجیستری و لایههای محلی Docker به مرور فضا مصرف میکنند. پیش از پاکسازی، مشخص کنید کدام ایمیجها برای بازگشت سریع یا اجرای سرویسهای مهم لازماند. حذف بیبرنامه لایهها ممکن است در زمان قطعی اینترنت، دریافت دوباره نسخه موردنیاز را دشوار کند. سیاست پاکسازی باید با سیاست نگهداری نسخههای استقرار هماهنگ باشد.
فضای مصرفی Docker را بهصورت دورهای بررسی کنید و برای پارتیشن داده هشدار تعریف کنید. اگر مسیر data-root روی دیسک جداگانه قرار دارد، وضعیت mount و ظرفیت آن را پس از راهاندازی مجدد سرور کنترل کنید. خطای کمبود فضا میتواند به شکست pull، build یا نوشتن لایه منجر شود و شبیه اختلال رجیستری به نظر برسد.
تست بازیابی ایمیج در محیط بدون اینترنت
برای سرویسهای حساس، یک تمرین بازیابی طراحی کنید که در آن دسترسی به رجیستری عمومی قطع باشد. نسخه آفلاین ایمیجها را به ماشین آزمایشی منتقل کنید، آنها را بارگذاری کنید و سرویس را با همان فایلهای پیکربندی اجرا کنید. این آزمون مشخص میکند آیا فقط ایمیج را ذخیره کردهاید یا وابستگیهای جانبی و دادههای لازم نیز در دسترس هستند.
فهرست ایمیجهای موردنیاز را همراه نسخه، digest، تاریخ تهیه و نام سرویس نگه دارید. پس از بهروزرسانی موفق، نسخه جدید را به آرشیو اضافه کنید و نسخه قبلی را تا پایان دوره بازگشت نگه دارید. این روش برای سرویسهایی که نباید به دسترسی لحظهای اینترنت وابسته باشند، ارزش عملیاتی دارد.
پرسشهای متداول
تفاوت خطای 403 و 429 چیست؟
403 ردشدن درخواست است و 429 معمولاً به محدودیت نرخ درخواست اشاره دارد.
آیا ویرایش daemon.json کانتینرها را متوقف میکند؟
ویرایش فایل بهتنهایی اثری ندارد؛ رفتار reload یا restart به نسخه و تنظیمات Docker بستگی دارد.
چطور اصالت ایمیج را بررسی کنم؟
digest نسخه دریافتشده را با مرجع قابل اعتماد پروژه تطبیق دهید.

کمپین ابتکار نو
کمپین ایده های نو
کمپین آینده روشن
کمپین طراحی مدرن