2017-06-12 3 views
0

Ich versuche, das Docker Bild in der folgenden Repository vorgestellt anpassen https://github.com/erkules/codership-imagesDockerfile Einstiegspunkt

ich einen Cron-Job in der Dockerfile erstellt und versucht, es mit CMD, zu wissen, die Dockerfile für die erkules zu laufen Bild eine hat ENTRYPOINT ["/entrypoint.sh"]. Es hat nicht funktioniert.

Ich habe versucht, eine separate cron-entrypoint.sh zu erstellen und fügen Sie es in die Docker-Datei, dann testen Sie etwas wie diese ENTRYPOINT ["/entrypoint.sh", "/cron-entrypoint.sh"]. Aber auch einen Fehler bekommen.

Ich habe versucht, den Cron-Job zum entrepoint.sh Erkules Bild hinzufügen, wenn ich es am Anfang, dann der Container führt den Cron-Job, aber führt nicht den Rest der entrepoint.sh. Und wenn ich das Cron-Skript an das Ende von entrypoint.sh setze, wird der Cron-Job nicht ausgeführt, aber alles oben im entruckpoint.sh wird ausgeführt.

Wie kann ich in der Lage sein zu laufen, was in der ist der entrypoint.sh von erkules Bild und mein cron-Job zur gleichen Zeit durch die Dockerfile?

+0

Sollte es ENTRYPOINT [ "./entrypoint.sh"] sein? –

+0

hinzufügen 'crond' an einem gewissen Punkt des entrypoint.sh –

+0

nicht notwendig ... solange ich sowohl die entrypoint.sh und den Cron-Job ausführen kann – montatich

Antwort

0

Sie müssen den Cron-Befehl in den Hintergrund schicken, so verwenden Sie entweder & oder entfernen Sie den -f (-f means: Stay in foreground mode, don't daemonize.)

in Ihrem entrypoint.sh So:

#!/bin/bash 
cron -f & 
(
# the other commands here 
) 

Edit: Ich bin total einverstanden mit @BMitch bezüglich der Art und Weise, wie Sie mehrere Prozesse bearbeiten sollten, aber innerhalb desselben Containers, was nicht so empfehlenswert ist.

Siehe Beispiele hier: https://docs.docker.com/engine/admin/multi-service_container/

+0

danken you..I schätzen Ihre Hilfe so viel – montatich

+0

nichts zu danken. – Robert

0

Das erste, was zu sehen ist, ob Sie in dem gleichen Behälter mehr Anwendungen benötigen laufen. Im Idealfall würde der Container nur eine einzige Anwendung ausführen. Sie können möglicherweise mehrere Container für verschiedene Apps ausführen und sie mit denselben Netzwerken verbinden oder ein Volume teilen, um Ihre Ziele zu erreichen.

Ihr Design erfordert im gleichen Behälter mehrere Anwendungen Unter der Annahme, können Sie einige im Hintergrund starten und die letzte im Vordergrund ausgeführt. Ich würde mich jedoch darauf konzentrieren, ein Werkzeug zu verwenden, das mehrere Prozesse verwaltet. Zwei Werkzeuge, die ich mir vorstellen kann, sind Supervisor und Foreman in Go. Der Vorteil von etwas wie Supervisord ist, dass es Signale handhaben wird, um die Anwendungen sauber herunterzufahren und wenn ein Prozess stirbt, können Sie ihn so konfigurieren, dass er diese App automatisch startet oder den Container als fehlgeschlagen und abnormal betrachtet.