কীভাবে "পুনঃসূচনা: সর্বদা" নীতিটি ডকার-রচনায় কাজ করে?


23

পোস্টগ্র্রেএসকিউএল এবং আমার অ্যাপ্লিকেশনটির সাথে আমার কাছে ডকার রচনা ফাইল রয়েছে:

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 x64।

আমার প্রশ্নগুলি হ'ল:

  1. কেন ডকার-কম্পোজ ক্র্যাশ হওয়া (নিহত) ধারকটি পুনরায় চালু করবেন না?
  2. পুনরায় চালু করার নীতিটি কাজ করে কিনা তা কীভাবে পরীক্ষা করবেন?


1
আমি সেখানে অনেকবার ছিলাম, তবে আপনি দেখতে পাচ্ছেন যে ডকুমেন্টেশনটি শক্তিশালী নয় এবং এই বৈশিষ্ট্যটি কীভাবে কাজ করে সে সম্পর্কে কোনও ব্যাখ্যা নেই, এজন্যই আমি প্রশ্ন জিজ্ঞাসা করেছি - আমি এই ক্ষেত্রে অভিজ্ঞ ব্যক্তির কাছ থেকে উত্তর দেখতে চাই।
মার্সিন জাবলকি

উত্তর:


20

আপনি যখন ডকার কিল ব্যবহার করেন, ডকার এই ধারকটি পুনরায় আরম্ভ না করায় এটি প্রত্যাশিত আচরণ: "আপনি যদি কোনও ম্যানুয়ালি কোনও ধারক বন্ধ করে দেন, ডকার ডিমন পুনরায় আরম্ভ না করা বা ধারকটি ম্যানুয়ালি পুনরায় আরম্ভ না করা অবধি এটি পুনরায় চালু করার নীতি উপেক্ষা করা হবে prevent একটি পুনঃসূচনা লুপ " (রেফারেন্স)

আপনি যদি ডকার স্টপ বা ডকার কিল ব্যবহার করেন তবে আপনি নিজেই ধারকটি বন্ধ করছেন stop আপনি পুনঃসূচনা নীতিগুলি সম্পর্কে কিছু পরীক্ষা করতে পারেন: ডকার ডিমন পুনরায় চালু করা, আপনার সার্ভারটি পুনরায় চালু করা, একটি পাত্রে সিএমডি ব্যবহার করে এবং একটি প্রস্থান চলমান ...

উদাহরণস্বরূপ, যদি আমি পুনরায় চালু করার নীতিমালা সহ আমার কন্টেনারটিকে হত্যা করি তবে আমি দেখতে পাচ্ছি যে এটি কোড 137 দিয়ে উপস্থিত হয়েছে তবে ডকার পিএসএএ অনুযায়ী এটি পুনরায় আরম্ভ করা হয়নি, এটি বিদ্যমান রয়েছে:

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

তবে আমি যদি ডেমন পুনরায় চালু করি ...

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

পুনরায় আরম্ভের নীতিমালা দিয়ে সেট করা ধারকটি আবার শুরু হয় যা ডকুমেন্টেশন বলে, সুতরাং ডকার কিল যেভাবে আপনার পুনরায় আরম্ভের নীতিটি পরীক্ষা করা উচিত নয় এটি ধারণা করা হয় যে আপনি ইচ্ছাকৃতভাবে ধারকটি বন্ধ করে দিয়েছেন এবং ডকার পুনরায় আরম্ভ করার জন্য একটি উপায় রাখতে চায় লুপস, যদি আপনি এটি হত্যা করেন তবে আপনি সত্যিই এটি হত্যা করতে চান।

আমি নিম্নলিখিত লিঙ্কগুলি মূল্যবান পেয়েছি যা বিভিন্ন সংস্করণে একই আচরণ দেখায় (সুতরাং এটি কোনও বাগ নয় তবে প্রত্যাশিত আচরণ):

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.