
شغّل Ollama داخل Docker: المنفذ المكشوف قد يبدد خصوصية النموذج المحلي

لتشغيل Ollama داخل حاوية Docker، احفظ ملفات النماذج في وحدة تخزين دائمة واربط منفذ الخدمة بعنوان المضيف المحلي، ثم نزّل النموذج الذي سيستخدمه تطبيقك. تحدد تعليمات Ollama للحاويات الصورة ollama/ollama ومسار التخزين /root/.ollama والمنفذ 11434، وتعرض خياراً لتشغيل بطاقة NVIDIA بعد تجهيز المضيف.
يمكن للتطبيق الموجود على المضيف الاتصال بالواجهة المتوافقة مع OpenAI عبر http://127.0.0.1:11434/v1. لكن طريقة نشر المنفذ هي التي تحدد نطاق الوصول: إذا نُشر على واجهات شبكة المضيف، فقد يستطيع جهاز آخر مخاطبة خدمة Ollama المحلية التي لا تطلب مفتاح API. لذلك افحص الربط الفعلي قبل توصيل التطبيق، ثم افحص ذاكرة الجهاز وقدرات النموذج الذي اخترته.
ملف Compose للمعالج وبطاقة NVIDIA

احفظ نسخة المعالج التالية في ملف compose.yaml. صيغة JSON هنا صالحة داخل ملف YAML، والسطر كله هو محتوى الملف: {"services":{"ollama":{"image":"ollama/ollama","restart":"unless-stopped","ports":["127.0.0.1:11434:11434"],"volumes":["ollama:/root/.ollama"]}},"volumes":{"ollama":{}}}. شغّل docker compose config لفحص الإعداد، ثم docker compose up -d لإنشاء الخدمة. يشير اسم ollama الأول إلى خدمة Compose، بينما يشير الاسم في قسم volumes إلى وحدة التخزين.
إذا كان المضيف مزوداً ببطاقة NVIDIA ومهيأً لتمريرها إلى الحاويات، فاستخدم هذه النسخة بدلاً من نسخة المعالج: {"services":{"ollama":{"image":"ollama/ollama","restart":"unless-stopped","gpus":"all","ports":["127.0.0.1:11434:11434"],"volumes":["ollama:/root/.ollama"]}},"volumes":{"ollama":{}}}. يتطلب خيار gpus إصداراً من Docker Compose يدعمه، إضافة إلى تعريفات البطاقة وNVIDIA Container Toolkit على المضيف. إذا تعذر بدء الحاوية بهذا الإعداد، افحص تمرير البطاقة أولاً؛ لا يفيد تغيير اسم النموذج في حل مشكلة وصول الحاوية إلى GPU.
تفصل وحدة التخزين المسماة ملفات النماذج عن طبقة الحاوية. لذلك يمكن إعادة إنشاء الخدمة مع الإبقاء على الملفات، بشرط الإبقاء على وحدة التخزين نفسها واسم مشروع Compose الذي تتبعه. انتبه إلى أن docker compose down -v يزيل وحدات التخزين المعرفة بالمشروع؛ استخدمه فقط عندما تقصد حذف البيانات المحفوظة. أما restart: unless-stopped فينظم إعادة تشغيل الحاوية، ولا يحل محل التخزين الدائم.
افحص نطاق المنفذ قبل ربط التطبيق
يؤدي نشر المنفذ بصيغة 11434:11434 من دون عنوان مضيف إلى إتاحته افتراضياً على عناوين المضيف، بينما تقصره الصيغة 127.0.0.1:11434:11434 على واجهة الاتصال المحلي في الإعداد المعتاد. وتوضح وثائق Docker لنشر المنافذ هذا الفرق، مع تنبيه إلى أن إصدارات Docker الأقدم من 28.0.0 قد تسمح لأجهزة على الشبكة المحلية نفسها بالوصول حتى إلى منفذ مربوط بعنوان الاتصال المحلي.
بعد بدء الخدمة، نفّذ docker compose ps وتحقق من أن المنفذ المنشور يظهر مع 127.0.0.1، لا مع 0.0.0.0. ثم جرّب curl http://127.0.0.1:11434/api/tags من المضيف: الاستجابة تثبت أن المسار المحلي يعمل، لكنها لا تثبت وحدها أن الوصول من الشبكة محجوب. افحص أيضاً إعدادات الجدار الناري أو أي وسيط نشر آخر إذا كان الجهاز يعمل ضمن شبكة مشتركة.
لا تضع قيمة شكلية في خانة مفتاح API وتعدّها حماية للمنفذ؛ الخدمة المحلية لا تتحقق من هذا المفتاح افتراضياً. إذا احتاجت أجهزة أخرى إلى الوصول، فاجعل ذلك عبر وسيط يفرض المصادقة ويقيد العملاء المسموح لهم، بدلاً من نشر Ollama مباشرة. وإذا كان التطبيق نفسه داخل مشروع Compose، فبإمكانه الاتصال بالخدمة عبر شبكة المشروع من دون نشر منفذ Ollama على المضيف أصلاً.
اختر نموذجاً يتسع له القرص والذاكرة

ابدأ بنموذج واحد حتى ترى متطلبات جهازك قبل تنزيل غيره. مثال قابل للاستبدال هو docker compose exec ollama ollama pull llama3.2؛ وبعد اكتمال التنزيل، يعرض docker compose exec ollama ollama list النماذج الموجودة وحجم ملفاتها. انسخ اسم النموذج من هذه القائمة إلى إعداد التطبيق، لأن تشغيل الحاوية بنجاح لا يعني أن نموذجاً صار مثبتاً أو جاهزاً لتلقي الطلبات.
افصل بين المساحة اللازمة للتنزيل والذاكرة اللازمة للاستدلال. حجم الملفات المعروض في القائمة يساعدك على تقدير استهلاك القرص، بينما يتأثر التحميل في RAM أو VRAM بالنموذج وطول السياق وعدد الطلبات المتزامنة. اترك مساحة للذاكرة التي يستخدمها نظام التشغيل والتطبيق نفسه؛ امتلاء الذاكرة قد يبطئ الجهاز أو يمنع تحميل النموذج حتى لو كانت مساحة القرص كافية.
أرسل طلباً قصيراً إلى النموذج، ثم نفّذ docker compose exec ollama ollama ps لمعرفة النموذج المحمّل وحجمه والجهة التي تنفذ المعالجة. يعرض docker stats استهلاك الحاوية من موارد المضيف، لكنه ليس بديلاً عن فحص ذاكرة بطاقة NVIDIA بأداة مثل nvidia-smi. إذا ظهر ضغط واضح على الذاكرة أو تعثر التحميل، فاختر نموذجاً أصغر أو قلل طول السياق قبل زيادة عدد الطلبات.
استخدم عنوان الاتصال المناسب لمكان التطبيق
عندما يعمل التطبيق على المضيف نفسه، اضبط عنوانه الأساسي على http://127.0.0.1:11434/v1 واسم النموذج على ما يظهر في قائمة Ollama. تذكر وثائق Docker للنماذج المحلية أن تكامل Ollama يستخدم واجهة متوافقة مع OpenAI بهذا العنوان ولا يحتاج مفتاح API للاتصال المحلي؛ وقد تطلب بعض مكتبات العملاء قيمة في خانة المفتاح لأسباب تتعلق بتهيئتها، من دون أن تصبح تلك القيمة وسيلة مصادقة للخدمة.
تحقق أولاً من قائمة النماذج عبر curl http://127.0.0.1:11434/v1/models، ثم أرسل من تطبيقك طلب محادثة صغيراً إلى /v1/chat/completions باستخدام اسم النموذج المثبت. عند فشل الاتصال، راجع حالة الحاوية والعنوان والمنفذ المنشور. وعند ظهور خطأ يتعلق بالنموذج، قارن الاسم المرسل بما تعرضه القائمة؛ هذان سببان مختلفان ولا يعالجان بتغيير إعداد واحد.
إذا كان التطبيق حاوية أخرى في مشروع Compose نفسه، فاضبط عنوانه على http://ollama:11434/v1. يحل Compose اسم خدمة ollama داخل شبكة المشروع، بينما يشير 127.0.0.1 من داخل حاوية التطبيق إلى الحاوية ذاتها. ويمكن حذف قسم ports من إعداد Ollama عندما لا تحتاج إلى استدعاء الخدمة من المضيف؛ يظل الاتصال بين خدمات المشروع ممكناً عبر شبكة Compose.
تحقق من دعم الأدوات في النموذج المختار
نجاح محادثة نصية لا يكفي إذا كان التطبيق يرسل تعريفات أدوات أو ينتظر استدعاء دالة. بعض النماذج المحلية لا تدعم استدعاء الأدوات أو لا تنتج الصيغة التي يحتاجها التطبيق. أرسل طلباً صغيراً يتضمن أداة محددة، وتحقق من أن الاستجابة تحمل استدعاءً منسقاً، ثم من أن التطبيق يستطيع إعادة نتيجة الأداة إلى المحادثة.
اختبر هذه الوظيفة بالنموذج والإعداد نفسيهما اللذين ستستخدمهما في التطبيق؛ تبديل النموذج قد يغير النتيجة حتى مع بقاء عنوان الواجهة ثابتاً. إذا أعاد النموذج جواباً نصياً بدلاً من استدعاء الأداة، فاختر نموذجاً يدعم هذا المسار أو عدّل وظيفة التطبيق التي تعتمد عليه. بهذا يكتمل فحص الاتصال والموارد والسلوك المطلوب قبل إتاحة التطبيق لمستخدميه.
اقرأ أيضًا:
مقالات ذات صلة


Amazon S3 يدخل Vercel: مفاتيح OIDC مؤقتة لكن الربط ينشئ حاويات جديدة فقط

Google Cloud يرصد أربع شذوذات في التخزين قبل أن تظهر في الفاتورة

BigQuery يضع مسارات البيانات داخل Git، لكن الميزة ما زالت Preview

Citrix تشتري Numecent: تحديث تطبيقات Windows بلا صورة جديدة

إيراد تجمع 22 مليون دولار: طلبات التمويل بلغت أربعة مليارات ريال
اشترك في نشرتنا الإخبارية
احصل على أحدث أخبار الويب 3 والذكاء الاصطناعي والعملات المشفرة مباشرة في بريدك.