الرجوع لكل المقالات
development

اتصال بـ PostgreSQL شغال داخل Docker

3 دقايق قراءة
14 مشاهدة

اتصال إلى PostgreSQL الذي يعمل داخل Docker بسيط لو فهمت ما يحدث بالضبط تحت الغطاء. معظم المشاكل تأتي من خلط مفاهيم الشبكة في الحاويات مع افتراضات الجهاز المحلي. دعونا نوضح الأمور خطوة بخطوة.

الفكرة الأساسية

عندما يعمل PostgreSQL داخل حاوية Docker وتقوم بتعريض منفذه، يعمل Docker مثل الجسر. جهازك المحلي يتكلم مع Docker، وDocker يقوم بتوجيه المرور إلى داخل الحاوية. هذا يعني أنك لا تتصل بالحاوية عن طريق عنوان IP الخاص بها. أنت تتصل بجهازك الخاص، عادةً عن طريق 127.0.0.1، على المنفذ الذي قام Docker بتعريضه.

الأمر الصحيح ل psql المحلي

psql -h 127.0.0.1 -p 5432 -U my-pg-user my-pg-db هذا هو الإعداد الأكثر شيوعًا وصحيحًا للاستخدام التطويعي المحلي. ما يعنيه كل جزء ببساطة:

  • -h 127.0.0.1 أنت تتصل بجهازك المحلي. Docker يستمع هنا ويقوم بتوجيه الاتصال إلى Postgres داخل الحاوية.
  • -p 5432 المنفذ الذي قام Docker بتعريضه. إذا قمت بتعيين 5432:5432، فهذا صحيح. إذا استخدمت منفذًا آخر، استخدم ذلك المنفذ بدلاً من ذلك.
  • -U my-pg-user دور قاعدة البيانات الذي قمت بإنشائه عند 초기ته Postgres.
  • my-pg-db اسم قاعدة البيانات التي تريد الاتصال بها. بعد تشغيل هذا الأمر، سيتطلب psql كلمة المرور بشكل تفاعلي.

استخدام سلسلة الاتصال بدلاً من ذلك

Postgres يدعم أيضًا سلسلة اتصال واحدة. هذا مفيد للسكريبتات والأدوات. psql "postgresql://example_user:[email protected]:5432/my-pg-db" هذا الشكل شائع في ORMs، متغيرات البيئة، وخطوط أنابيب CI. يコード نفس المعلومات مثل العلامات، ولكن في سلسلة واحدة.

عندما يتطلب الاتصال SSL

بعض صور Docker أو الإعدادات الشبيهة بالإنتاج تفرض اتصالات SSL. في هذه الحالة، سي拒ع Postgres الاتصالات العادية إلا إذا طالبته بشكل صريح بـ SSL. تفعل ذلك باستخدام sslmode=require. psql "postgresql://example_user:[email protected]:5432/my-pg-db?sslmode=require" إذا كان SSL إلزاميًا وتنسى هذا العلم، فإن رسالة الخطأ تكون غالبًا محيرة. معرفة هذا الأمر مسبقًا يوفر الوقت.

تجنب كلمات المرور في تاريخ الأوامر

وضع كلمات المرور مباشرة في الأوامر له مشاكلتان:

  • يتم حفظها في تاريخ شل الخاص بك.
  • تكون مرئية للعمليات الأخرى عبر أدوات مثل ps aux. من الأفضل استخدام متغير بيئة فقط لهذا الأمر: PGPASSWORD="example_password" psql -h 127.0.0.1 -p 5432 -U example_user example-db هذا ي避ي كتابة كلمة المرور وي避ي تخزينها بشكل دائم. للاعدادات طويلة الأجل، .pgpass أفضل، ولكن هذا موضوع منفصل.

فحص صحة Docker عند فشل الاتصال

إذا لم ينجح الاتصال، قم بفحص Docker قبل لمس إعدادات Postgres. أولاً، تحقق من تشغيل الحاوية وتعرض المنفذ: docker ps يجب أن ترى شيئًا مثل: 0.0.0.0:5432->5432/tcp إذا لم تر هذا الخريطة، فإن Postgres غير متاح من جهازك. بعد ذلك، قم بفحص السجلات: docker logs postgres-db تريد رؤية رسائل تشير إلى أن Postgres بدأ بنجاح ويستمع على المنفذ المتوقع. إذا كان Postgres سليمًا والمنفذ معروضًا، سيعمل psql. إذا لم ينجح، فإن المشكلة تقريبًا دائمًا تكون مع بيانات الاعتماد أو اسم قاعدة البيانات أو وضع SSL.

نموذج عقلي للحفظ

جهازك المحلي → تعيين منفذ DockerPostgres داخل الحاوية مرة واحدة تصبح هذه السلسلة واضحة، ي停止 الاتصال بـ Postgres في Docker من الشعور بالغموض ويتحول إلى شيء ممل. الممل هو جيد في عمل الخلفية.

مقالات مشابهة

عرض الكل في development