2017-01-09 2 views
0

Obwohl es scheint, wie die --restart Flagge ist einfach und unkompliziert, kam ich mit einer Reihe von Fragen auf, wenn mit ihr zu experimentieren:Docker - was macht `docker laufen --restart immer` eigentlich?

  1. Hinsichtlich ENTRYPOINT Definitionen - was ist die tatsächliche definiert Semantik beim Neustart?
  2. Wenn ich exec in den Container (ich bin auf einer DDC) und kill -9 den Prozess, es startet neu, aber wenn ich tun docker kill tut es nicht. Warum?
  3. Wie funktioniert der Neustart mit gemeinsam genutzten Datencontainern/benannten Volumes?

Antwort

2

Restart Politik

die --restart Flagge auf Docker Mit führen Sie einen Neustart Richtlinie für die wie ein Container sollte oder nicht beim Beenden neu gestartet werden, angeben.

Wenn eine Neustart-Richtlinie für einen Container aktiv ist, wird sie in Docker ps entweder als "Auf" oder "Neustart" angezeigt. Es kann auch nützlich sein, docker-Ereignisse zu verwenden, um die aktuelle Neustart-Richtlinie zu sehen.

Docker Lauf --always

Die Behälter stets unabhängig von dem Exit-Status neu starten. Wenn Sie immer angeben, versucht der Docker-Daemon, den Container unbegrenzt neu zu starten. Der Container startet auch immer beim Start des Dämons, , unabhängig vom aktuellen Status des Containers.

Ich empfehle Ihnen diese Dokumentation über Neustart-Politik

Restart policies

Restart policies - more detail

+0

So hatte ich RTFM vor der Frage - diese Antwort befasst sich überhaupt keine meiner Fragen überhaupt! Keiner dieser Links erwähnt den ENTRYPOINT für den Container. Führt es aus, welche Parameter werden übergeben? Ein Zitat von einem der Links sagt: "[Neustarts fortgesetzt unbegrenzt,] oder wenn Sie docker stoppen oder docker rm -f den Container". Wenn ich docker kill, gibt es keinen Neustart. – JoeG

0

ich einige Zeit dies heute zu debuggen hatte -> weil ich eine 'offizielle' wurde mit Docker-Bild Ich hatte wenig bis keine Einsicht in das, was vor sich ging. Um dies zu beheben, habe ich das offizielle Image erweitert und meinen eigenen Einstiegspunkt aufgerufen. Die Dockerfile:

FROM officialImage:version 

ENV envOne=value1 \ 
    envTwo=value2 
COPY wrapper-entrypoint.sh/
ENTRYPOINT ["/wrapper-entrypoint.sh"] 

Dann habe ich eine 'set -x' im wrapper-entrypoint.sh Skript und aufgerufen, um das Original:

#!/bin/bash 
set -x 

echo "Be pedantic: all args passed: [email protected]" 
bash -x ./original-entrypoint.sh "[email protected]" 

Daraus ich gefunden:

  • Neustart ruft die Original ENTRYPOINT mit den ursprünglichen Argumenten. Das offizielle Bild, das ich verwendet habe, hat es bereits initialisiert und somit anders gehandelt. Aus diesem Grund war ich verwirrt über die Semantik. Mit -x konnte ich sehen, was wirklich passiert ist.
  • Ich weiß immer noch nicht, warum docker kill stoppt den Neustart, aber das ist, was ich sehe - zumindest auf Docker Data Center.
  • Ich glaube nicht, dass Shared Data Volumes dies in irgendeiner Weise beeinflussen, SAVE für die Aktionen, die ein gegebenes ENTRYPOINT Skript basierend auf seiner Bedingung zum Zeitpunkt des Neustarts ausführen könnte.