كيف أقوم بتثبيت وضبط قاعدة البيانات mariaDB بداخل دوكر ؟

السلام عليكم ، بعد قراءة الموضوعين الرائعين :
أساسيات عالم الحاويات docker / docker-compose والحوسبة السحابية
و Nginx proxy manager اسهل طريقه من اجل عمل webserver مخصص للحاويات(docker/podman)

استطعت تثبيت برمجية syncthing وضبطها بنجاح.

الآن أود تثبيت حاوية تشمل فقط نظام إدارة قواعد البيانات mariadb .
قمت بكتابة هذا الملف:

version: "3"
services:
  mariadb:
    image: mariadb
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
    volumes:
      - ./data:/var/lib/mysql
    restart: unless-stopped
    networks:
      - web

networks:
  web:
    external: true

لاحظ أنني لم أكشف أي منفذ فلا أريد إظهارها للانترنت ، بل أريدها أن تكون متاحة فقط لباقي الحاويات داخل نفس الشبكة web.

عندما أردت اختبار اتصال بقاعدة البيانات ، وقع اختياري على phpmyadmin لتجربة تلك الإعدادات ، وكتبت هذا الملف:

version: '3'
services:
  phpmyadmin:
    image: phpmyadmin:fpm-alpine
    container_name: phpmyadmin
    hostname: pma
    restart: always
    ports:
      - "127.0.0.1:7618:80"
    environment:
      - PMA_HOST=mariadb
      - MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}"
      - PMA_ABSOLUTE_URI="${PMA_ABSOLUTE_URI}"
    networks:
      - web
networks:
  web:
    external: true

بالطبع يوجد ملف .env بداخل نفس المسار يحتوي على نفس كلمة المرور الموجودة في حاوية mariadb.

قمت بعدها بإنشاء نطاق فرعي pma.example.com وفتحت لوحة التحكم NPM وأضفت شهادة SSL للنطاق ، ثم أضفت إعداد الوكيل لحاوية phpmyadmin بالشكل التالي: http://phpmyadmin:7618

لكن للأسف عند زيارة pma.example.com يعطيني خطأ ٥٠٢.

وعند التحقق من سجلات nginx وجدت الرسالة التالية:

2022/07/29 00:28:52 [error] 16418#16418: *14928 connect() failed (111: Connection refused) while connecting to upstream, client: 172.70.86.27, server: pma.example.com, request: "GET/ HTTP/2.0", upstream: "http://172.16.32.5:7618/", host: "pma.example.com", referrer: "http://localhost:7618/"

قمت باختبار استجابة الحاوية من داخلها ، باستخدام الأمر : docker exec phpmyadmin curl http://localhost:7618

وكان هذا الرد: curl: (7) Failed to connect to localhost port 7618 after 1 ms: Connection refused

حسب علمي إذا كانت المشكلة في الاتصال بقاعدة البيانات ، فسوف يفتح phpmyadmin على الأقل ويخبرني بوجود مشكلة في الاتصال، لكن الأغلب أن المشكلة في حاوية phpmyadmin نفسها.

إذن كيف يمكنني تجربة اتصال mariadb للتأكد من أنها تعمل ؟

الجزء الآخر

أنا أود إبقاء حاوية mariadb بشكل مستقل لكن مع وضعها بنفس الشبكة web بحيث تستطيع كافة الحاويات الموجودة بنفس الشبكة أن تتصل بها.
ذلك لأنني لا أريد تثبيت عدد كبير من نسخ mariadb مع كل برمجية جديدة . يكفي واحدة فقط في النظام ككل ، ولكل برمجية تستطيع الاتصال بها وإنشاء قاعدة بيانات خاصة.

عند استخدام وردبرس مثلا ، هل أكتب mariadb في المتغير WORDPRESS_DB_HOST ؟ أم أكتب عنوان مثل 172:16:32:4 ؟
هل وردبرس سوف يتعرف على mariadb مثلما يتعرف NPM على http://phpmyadmin ؟

المشكلة من PHPmyadmin نفسه, هو لا يعمل ويرفض الاتصالات.
انظر في سجلات الحاوية عبر:

docker compose logs -f phpmyadmin
Attaching to phpmyadmin
phpmyadmin    | [29-Jul-2022 17:19:32] NOTICE: fpm is running, pid 1
phpmyadmin    | [29-Jul-2022 17:19:32] NOTICE: ready to handle connections

هل أحتاج فتح المنفذ ؟

تاكد من المنفذ الذي تستخدمه، ربما المنفذ الخطأ.

جرب ٨٠ و ٨٠٨٠ و ٧٦١٨ ولم يعمل أي منهم.

سوف أحذف الحاوية وأجربها على حاسبي الشخصي لأبحث عن سبب المشكلة.

اي نسخه تستخدم ؟
Apache?
اذا apache المفروض تستخدم منفذ ٨٠.

https://hub.docker.com/r/phpmyadmin/phpmyadmin/

يبدو أن المشكلة كانت في نسخة phpmyadmin:alpine
جربت استخدام phpmyadmin والآن هي تعمل بشكل جيد عبر منفذ ٨٠.

في النهاية ، اكتشفت أنه يمكنني استخدام mysql مباشرة من جهازي الشخصي عبر إنشاء نفق SSH مثلما فعلت مع nginx proxy manager :sweat_smile:

أستخدم برنامج DBeaver