ثبت سفارش آنلاین به‌زودی فعال می‌شود. تا آن موقع برای سفارش با ما تماس بگیرید.Online ordering is coming soon. Until then, please contact us to order.تماس با ماContact us
JolfaCLOUD

مرکز آموزش / گیت و DevOps

نصب داکر روی سرور مجازی در ایران و دور زدن خطای 403 داکر هاب با آینهٔ داخلی

چرا docker pull در ایران خطای 403 می‌دهد، نصب داکر از مخزن رسمی یا مخزن اوبونتو، تنظیم registry-mirrors با آینه‌های داخلی، ریسک اعتماد به آینه و قفل کردن image با digest، و رجیستری‌های غیر از Docker Hub.

۱۰ دقیقه مطالعه · به‌روزرسانی آبان ۱۴۰۵

This guide is available in Persian for now. Switch to FA to read it.

نصب داکر روی سرور مجازی در بیشتر دنیا دو دقیقه کار است. در ایران یک مرحلهٔ اضافه دارد: Docker Hub به خاطر مقررات صادراتی آمریکا، IPهای ایران را مسدود کرده است. نتیجه این است که docker pull روی سرور ایران معمولاً با خطای 403 یا «denied» برمی‌گردد. خوشبختانه راه‌حل ساده‌ای دارد.

نصب داکر روی اوبونتو

روش ۱: مخزن رسمی داکر

جدیدترین نسخه را می‌دهد. اگر سرور به download.docker.com دسترسی دارد:

bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

روش ۲: مخزن خود اوبونتو

اگر دسترسی به مخزن داکر مشکل داشت، اوبونتو بستهٔ داکر را در مخزن خودش دارد که از آینه‌های داخلی اوبونتو هم نصب می‌شود. نسخه‌اش کمی قدیمی‌تر است ولی برای بیشتر کارها کافی است:

bash
sudo apt-get update
sudo apt-get install -y docker.io docker-compose-v2

در هر دو حالت، تست کنید:

bash
sudo systemctl enable --now docker
docker --version
docker compose version

خطای 403 و آینهٔ داخلی

چند سرویس ایرانی آینهٔ (mirror) Docker Hub راه انداخته‌اند: درخواست شما را می‌گیرند، image را از Docker Hub می‌آورند و تحویل می‌دهند. تنظیمش در فایل /etc/docker/daemon.json است:

json
{
  "registry-mirrors": [
    "https://docker.arvancloud.ir",
    "https://focker.ir"
  ]
}
bash
sudo systemctl restart docker
docker info | grep -A3 "Registry Mirrors"
docker pull nginx:1.27

چند آینه بگذارید تا اگر یکی در دسترس نبود، بعدی امتحان شود. فهرست به‌روز آینه‌های داخلی را پروژهٔ متن‌باز Mirava در گیت‌هاب نگه می‌دارد؛ آینه‌ها گاهی از دسترس خارج می‌شوند یا آدرس عوض می‌کنند، پس قبل از استفاده چک کنید.

ریسک: به آینه اعتماد می‌کنید

آینه یک واسطه است. در تئوری، آینه‌ای که هک شده یا قابل اعتماد نیست می‌تواند به جای image اصلی، نسخهٔ دست‌کاری‌شده تحویل بدهد. برای سرویس‌های مهم، image را با digest قفل کنید. digest اثر انگشت محتوای image است و اگر یک بایت عوض شود، دیگر جور نمی‌شود:

bash
# روی سیستمی که به Docker Hub دسترسی مستقیم دارد، digest را بگیرید:
docker buildx imagetools inspect nginx:1.27 | grep Digest

# بعد روی سرور با همان digest بکشید:
docker pull nginx:1.27@sha256:<DIGEST>

در فایل compose هم می‌شود image: nginx:1.27@sha256:... نوشت. به این ترتیب حتی از آینه هم دقیقاً همان image اصلی را می‌گیرید یا خطا می‌خورید.

بدون اینترنت آزاد: انتقال image با فایل

bash
# روی سیستمی که image را دارد
docker save myapp:1.4 | gzip > myapp-1.4.tar.gz
scp myapp-1.4.tar.gz user@server:/tmp/

# روی سرور
gunzip -c /tmp/myapp-1.4.tar.gz | docker load

رجیستری خصوصی خودتان

برای imageهایی که خودتان می‌سازید، Docker Hub لازم نیست. رجیستری GitLab (حتی گیت‌لب خودمیزبان روی سرور ایران)، یا رجیستری ساده با image رسمی registry:2 روی همان سرور، مشکل دسترسی را کلاً حذف می‌کند. روش ساخت و دیپلوی خودکار را در مقالهٔ گیت‌هاب و گیت‌لب ببینید.

اجرا بدون sudo؟

اضافه کردن کاربر به گروه docker (sudo usermod -aG docker $USER) راحت است، ولی عضو گروه docker عملاً root سرور است، چون می‌تواند کانتینری با دسترسی به کل دیسک اجرا کند. فقط کاربرهایی را اضافه کنید که به root هم اعتماد دارید. جزئیات بیشتر در امنیت داکر.

سرور مجازی با IP اختصاصی برای میکروتیک، داکر و سرویس‌های خودتاندیدن پلن‌های سرور مجازی

منابع

  1. Docker Docs — Install Docker Engine on Ubuntu docs.docker.com/engine/install/ubuntu
  2. Docker Docs — Registry mirror docs.docker.com/docker-hub/image-library/mirror
  3. Docker Community Forums — IP limitations (sanctioned countries) forums.docker.com/t/is-there-any-chance-to-remvoe-ip-limitations-please/42625
  4. Mirava — Iranian package mirrors github.com/MiravaOrg/Mirava