خطای 403 در docker pull و apt update روی سرورهای ایران معمولاً بهخاطر مسدود شدن آیپیهای ایران توسط سرویسدهندهٔ خارجی (تحریم) یا اختلال مسیر بینالملل است. راهحل: استفاده از میرورهای داخلی برای apt (مثل mirror.arvancloud.ir یا mirror.iranserver.com) و تنظیم registry-mirrors در داکر. اگر میرور داخلی کافی نبود، ایمیج را روی سرور خارج بسازید و منتقل کنید.
آخرین بررسی در دسترس بودن میرورها: ۱۱ آبان ۱۴۰۵. میرورها توسط شرکتها و دانشگاههای مختلف ارائه میشوند و ممکن است تغییر کنند؛ پیش از استفادهٔ دائمی، از سالم بودن و بهروز بودن آنها مطمئن شوید.
علت خطا
- تحریم سمت سرویسدهنده: Docker Hub و برخی مخازن، درخواستهای آیپی ایران را با 403 پاسخ میدهند.
- اختلال اینترنت بینالملل: در زمان اختلال، اتصال به مخازن خارجی کند یا قطع میشود (Timeout).
- DNS: گاهی DNS پیشفرض نام مخازن را درست برنمیگرداند.
بعضی کاربران برای رفع 403 از DNS ضد تحریم استفاده میکنند؛ تفاوت آن با میرور داخلی و روش موقت و قابل برگشت تنظیمش روی سرور در DNS شکن چیست آمده است.
تنظیم میرور apt در Ubuntu 24.04
در Ubuntu 24.04 منابع در فایل /etc/apt/sources.list.d/ubuntu.sources هستند. ابتدا بکاپ بگیرید:
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i 's|http://[a-z.]*archive.ubuntu.com/ubuntu|https://mirror.arvancloud.ir/ubuntu|g; s|http://security.ubuntu.com/ubuntu|https://mirror.arvancloud.ir/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources
sudo apt update
تنظیم میرور apt در Ubuntu 22.04 و قدیمیتر
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's|http://[a-z.]*archive.ubuntu.com/ubuntu|https://mirror.arvancloud.ir/ubuntu|g; s|http://security.ubuntu.com/ubuntu|https://mirror.arvancloud.ir/ubuntu|g' /etc/apt/sources.list
sudo apt update
میرورهای جایگزین Ubuntu: https://mirror.iranserver.com/ubuntu و https://repo.iut.ac.ir/repo/ubuntu (دانشگاه صنعتی اصفهان).
میرور apt در Debian 12
در فایل /etc/apt/sources.list (یا /etc/apt/sources.list.d/debian.sources) آدرس deb.debian.org را با mirror.arvancloud.ir جایگزین کنید و سپس apt update بزنید. بخش امنیتی (security.debian.org) را هم در صورت وجود میرور معادل تغییر دهید.
تنظیم registry-mirrors داکر
فایل /etc/docker/daemon.json را بسازید یا ویرایش کنید:
{
"registry-mirrors": [
"https://docker.arvancloud.ir",
"https://docker.iranserver.com",
"https://focker.ir"
]
}
سپس:
sudo systemctl restart docker
docker info | grep -A3 "Registry Mirrors"
docker pull nginx:alpine
برخی میرورها بهجای registry-mirrors، استفاده با پیشوند را پشتیبانی میکنند؛ مثلاً docker pull docker.arvancloud.ir/nginx:alpine. راهنمای همان میرور را بخوانید.
میرور pip و npm
pip (موقت برای یک دستور):
pip install --index-url https://MIRROR/simple package-name
npm:
npm config set registry https://MIRROR/
بهجای MIRROR آدرس یک میرور داخلی معتبر و فعال PyPI یا npm را قرار دهید؛ میرورهای این دو اکوسیستم زیاد تغییر میکنند، پس پیش از استفاده سلامت آنها را بسنجید.
راه جایگزین: build روی سرور خارج
اگر میرور داخلی ایمیج یا بستهٔ موردنظر را ندارد:
- یک سرور خارج ساعتی بسازید.
- ایمیج را آنجا build یا pull کنید و ذخیره کنید:
docker pull myimage:tag
docker save myimage:tag | gzip > myimage.tar.gz
- فایل را به سرور ایران منتقل و بارگذاری کنید:
scp myimage.tar.gz root@IRAN_SERVER_IP:/root/
ssh root@IRAN_SERVER_IP "gunzip -c /root/myimage.tar.gz | docker load"
- سرور خارج را حذف کنید تا هزینه متوقف شود.
بازگرداندن تنظیمات
sudo mv /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources
sudo rm /etc/docker/daemon.json && sudo systemctl restart docker
تشخیص سریع: مشکل از کجاست؟
پیش از تغییر تنظیمات، با چند دستور ساده مطمئن شوید مشکل واقعاً محدودیت دسترسی است، نه DNS یا شبکهٔ سرور:
# آیا DNS کار میکند؟
getent hosts archive.ubuntu.com
# پاسخ مخزن چیست؟ (کد 403 یعنی دسترسی رد شده)
curl -sI http://archive.ubuntu.com/ubuntu/ | head -1
# آیا Docker Hub پاسخ میدهد؟
curl -sI https://registry-1.docker.io/v2/ | head -1
| نتیجه | معنی | راهحل |
|---|---|---|
| getent چیزی برنمیگرداند | مشکل DNS سرور | DNS را در /etc/systemd/resolved.conf اصلاح کنید |
| 403 Forbidden | دسترسی از آیپی ایران مسدود است | میرور داخلی یا build روی سرور خارج |
| Timeout | مسیر بینالملل کند یا قطع است | میرور داخلی؛ بعداً دوباره تلاش کنید |
| 200 یا 401 از Docker Hub | دسترسی برقرار است | مشکل از جای دیگری است (مثلاً محدودیت تعداد pull) |
$ curl -sI https://download.docker.com | head -1HTTP/2 403$ apt-get update 2>&1 | grep -E 'Err|403'$
خطاهای رایج و معنی آنها
403 Forbidden [IP: ...]هنگامapt update: سرور مخزن درخواست از آیپی شما را رد کرده است.Error response from daemon: ... 403هنگامdocker pull: Docker Hub یا CDN آن درخواست را رد کرده است.Temporary failure resolving: مشکل DNS؛ ربطی به تحریم ندارد.Hash Sum mismatchپس از تغییر میرور: فهرست بستهها ناقص دانلود شده؛sudo rm -rf /var/lib/apt/lists/*و دوبارهapt update.toomanyrequestsدر داکر: محدودیت تعداد pull بدون ورود؛ با میرور یاdocker loginرفع میشود.
انتخاب میرور قابل اعتماد
هر میروری که استفاده میکنید، این موارد را بررسی کنید:
- بهروز بودن: تاریخ آخرین همگامسازی معمولاً در صفحهٔ اصلی میرور درج شده است.
- امضای بستهها: apt امضای GPG بستهها را بررسی میکند؛ هرگز گزینهٔ
[trusted=yes]یا--allow-unauthenticatedرا برای دور زدن خطای امضا اضافه نکنید. - HTTPS: در صورت امکان از آدرس HTTPS میرور استفاده کنید.
- پشتیبان: دو میرور را بشناسید تا اگر یکی از دسترس خارج شد، سریع جایگزین کنید.
الگوی پیشنهادی برای پروژههای جدی
برای تیمهایی که مرتب روی سرور ایران deploy میکنند، بهجای وابستگی به دسترسی مستقیم:
- یک سرور خارج کوچک برای build بسازید (یا از CI خارج از ایران استفاده کنید).
- ایمیج داکر را آنجا بسازید و در یک رجیستری خصوصی یا بهصورت فایل ذخیره کنید.
- روی سرور ایران فقط ایمیج آماده را pull یا load کنید.
- بستههای سیستمی را از میرور داخلی نصب کنید.
نصب کامل داکر در راهنمای Docker روی Ubuntu 24.04 و انتخاب بین سرور ایران و خارج در سرور ایران یا خارج آمده است.
برای آماده شدن تیم فنی پیش از قطع اینترنت بینالملل، چکلیست کسبوکار در زمان اینترنت ملی را ببینید.
سؤالات متداول
چرا docker pull خطای 403 Forbidden میدهد؟
Docker Hub درخواستهای آیپیهای ایران را مسدود میکند. با تنظیم registry-mirrors یا استفاده از سرور خارج برطرف میشود.
آیا استفاده از میرور داخلی امن است؟
میرورهای apt بستهها را با امضای رسمی توزیع ارائه میدهند و apt امضا را بررسی میکند. برای ایمیجهای داکر، از میرورهای شناختهشده استفاده کنید و در صورت امکان digest ایمیج را بررسی کنید.
در زمان اختلال اینترنت بینالملل هم میرور داخلی کار میکند؟
اگر میرور داخل ایران میزبانی شود و محتوا را از قبل همگام کرده باشد، معمولاً بله؛ ولی بستههای جدید ممکن است با تأخیر برسند.
چرا روی سرور خارج همین دستورها بدون مشکل کار میکنند؟
محدودیت بر اساس آیپی مبدأ اعمال میشود؛ سرور خارج آیپی غیرایرانی دارد و مسیر بینالملل آن مستقیم است.
میرور داخلی امنیت بستهها را کاهش میدهد؟
تا وقتی بررسی امضای GPG فعال است، apt بستههای دستکاریشده را رد میکند. به همین دلیل نباید بررسی امضا را غیرفعال کنید.
آیا pip و npm هم ممکن است 403 بدهند؟
بله؛ در این حالت از میرورهای پیشنهادی همین صفحه یا نصب روی سرور خارج و انتقال بستهها استفاده کنید.
از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی



