2017-05-10 4 views
0

Ursprünglich war die letzte Zeile meines Dockerfile lesen:Halten Docker-compose Behälter läuft nach ENTRYPOINT

RUN puppet apply /etc/puppetlabs/puppet/master.pp 

Ich brauche den Befehl erst laufen, sobald der Behälter erstellt und angebracht wird, so dass ich geändert:

ENTRYPOINT puppet apply /etc/puppetlabs/puppet/master.pp 

Die Änderung behebt mein ursprüngliches Problem, aber erstellt ein anderes, der Container stoppt, nachdem der Befehl beendet wurde.

Ich habe festgestellt, dass ich den Container laufen lassen kann, indem ich etwas wie && while true; do sleep 1000; done hinzufüge.

Das scheint ein bisschen hacky und ich frage mich, ob es einen besseren Weg gibt, um meinen Container zu stoppen?

Hinweis: Ich habe online einige Vorschläge gesehen, bei denen Personen Flags verwenden, wenn sie den Befehl docker ausführen. Also werde ich darauf hinweisen, dass ich diesen Container unter Verwendung von docker-compose initialisiere.

Antwort

1

Ich verwende && sleep infinity. (Seien Sie sich bewusst, dass busybox sleep bietet keine infinity - nur die coreutils tun.)

+0

Danke gut zu wissen und schätzen die Details auf busybox. Ich werde das für jetzt offen lassen, da ich immer noch nach einer anderen Lösung suche. Ich schätze, ENTRYPOINT ist normalerweise, wenn Sie einen Container als ausführbare Datei verwenden möchten. In meinem Fall möchte ich nur einen Befehl ausführen, wenn der Container initialisiert wird. Grund ist, dass ich einen Befehl mit einer sensiblen Schlüsseldatei ausführe, die vor dem Initialisieren des Containers nicht vorhanden ist (weil es in einem angehängten Volume ist). –

Verwandte Themen