Liman işinde “yeniden başlat: her zaman” politikası nasıl çalışır?


23

Docker PostgreSQL ve uygulamam ile dosya oluşturduğum gibi:

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"

Sorun şu ki restart: always, kapsayıcıyı öldürdüğümde (uygulama çöküşünü simüle ederek docker kill) taklit ettiğimde politikanın işe yaramadığı görünüyor ve Dock-compose, Çıkış Kodu 137 olsa bile kapsayıcımı yeniden başlatmıyor .) restart: on-failurePolitika kullanırken aynı davranışı gözlemliyorum . Versiyonlar 2ve 3docker-compose aynı şekilde davranır. Sistemim Ubuntu Sunucusu 16.04 x64'tür.

Benim sorularım:

  1. Docker-compose neden çökmüş (öldürülmüş) kabı yeniden başlatmıyor?
  2. Yeniden başlatma politikasının işe yarayıp yaramadığı nasıl kontrol edilir?


1
Birçok kez orada bulundum, ancak görebildiğiniz gibi, belgeler sağlam değil ve bu özelliğin nasıl çalıştığına dair bir açıklama yok, bu yüzden soruyu sordum - bu alanda uygulamalı deneyime sahip birinden cevap görmek istiyorum.
Marcin Zablocki

Yanıtlar:


20

Docker kill'i kullandığınızda, Docker'ın kabı yeniden başlatmaması nedeniyle beklenen davranış budur: "Bir kabı el ile durdurursanız, Docker arka plan programı yeniden başlatılıncaya ya da kabı el ile yeniden başlatılıncaya kadar yeniden başlatma ilkesi yoksayılır. yeniden başlatma döngüsü " (başvuru)

Liman işçisi durdurma veya liman öldürücü kullanıyorsanız, konteyneri manuel olarak durduruyorsunuz. Yeniden başlatma politikaları hakkında bazı testler yapabilirsiniz: liman işçisi arka planını yeniden başlatmak, sunucunuzu yeniden başlatmak, bir kabın içinde bir CMD kullanmak ve bir çıkış yapmak ...

Örneğin, bir yeniden başlatma ilkesiyle konuşlandırılmış kapsayıcımı öldürürsem, 137 koduyla çıkıldığını görüyorum, ancak docker ps-a'ya göre yeniden başlatılmadığını görüyordum, çıkmaya devam ediyor:

[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

Ama cini yeniden başlatırsam ...

[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

Yeniden başlatma ilkesiyle ayarlanan kap, belgelerin söylediği şekilde yeniden başlar, bu nedenle liman işçisi öldürme, konteyneri kasten durdurduğunuzu varsaydığı için yeniden başlatma politikasını test etmeniz gerektiği gibi değildir; döngüler, öldürürseniz, gerçekten öldürmek istersiniz.

Aşağıdaki davranışları farklı sürümlerde aynı davranışı gösteren değerli buldum (bu nedenle hata değil beklenen davranış):

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.