كيف "إعادة تشغيل: دائما" عمل السياسة في عامل الميناء-يؤلف?

لدي عامل الميناء يؤلف ملف مع كيو وطلبي، مثل هذا:

version: '3'services:  postgresql:    image: postgres:9.6.6    ports:      - 9932:5432    expose:      - "5432"    environment:      - POSTGRES_PASSWORD=pass    restart: always    volumes:      - /data:/var/lib/postgresql/data  myapp:    image: myapp    links:      - postgresql    depends_on:      - "postgresql"    restart: always    ports:      - "5000:5000"

المشكلة هي أن restart: always لا يبدو أن السياسة تعمل عندما أقتل الحاوية (محاكاة تعطل التطبيق باستخدام docker kill) وعامل الميناء-يؤلف لا إعادة تشغيل حاوية بلدي ، على الرغم من أن رمز الخروج هو 137. ألاحظ نفس السلوك عند استخدام restart: on-failure سياسة. الإصدارات 2 و 3 من عامل الميناء-يؤلف تتصرف نفسها. نظام بلدي هو خادم أوبونتو 16.04 س 64.

أسئلتي هي:

  1. لماذا عامل الميناء-يؤلف لا إعادة تشغيل تحطمت (قتل) حاوية?
  2. كيفية التحقق مما إذا كانت سياسة إعادة التشغيل تعمل?

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

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

على سبيل المثال إذا كنت قتل حاوية بلدي نشرها مع سياسة إعادة التشغيل ، أرى أنه خرج مع رمز 137 ولكن لا يتم إعادة تشغيله وفقا لعامل الميناء بس-أ، فإنه لا يزال خرجت:

[root@andromeda ~]# docker ps --allCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   3 minutes ago       Exited (137) 34 seconds ago                       keepalive_redis_1

ولكن إذا قمت بإعادة تشغيل البرنامج الخفي...

[root@andromeda ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   30 minutes ago      Up 2 seconds        6379/tcp            keepalive_redis_1

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

لقد وجدت الروابط التالية ذات قيمة تظهر نفس السلوك في إصدارات مختلفة (لذلك ليس خطأ ولكن السلوك المتوقع):

كنت هناك عدة مرات ، ولكن كما ترون ، فإن الوثائق ليست قوية وليس هناك تفسير لكيفية عمل هذه الميزة ، لهذا السبب سألت سؤالا - أود أن أرى إجابة من شخص لديه خبرة عملية في هذا المجال.

Compose specification | Docker Documentation & Compose specification | Docker Documentation