2016-07-05 7 views
1

ich ein Bild von einem Dockerfile erstellt:Kann nicht mosquitto als Dienst auf Docker Container starten

FROM debian:latest 

RUN apt-get update && apt-get install -y \ 
mosquitto \ 
&& rm -rf /var/lib/apt/lists/* 

# mosquitto setup 
EXPOSE 1883 
COPY config/broker/conf.d/ /etc/mosquitto/conf.d/ 
CMD mosquitto 

Dies funktioniert, aber ich möchte mosquitto als Dienst starten (ist es überhaupt zu empfehlen?). Aber wenn ich die letzte Zeile mit

CMD service mosquitto start 

der Dienst ersetzen startet nicht & ich der Behälter nicht ausgeführt wird (aber ich keine Fehlermeldung während der Image-Erstellung erhalten)

Antwort

0

die Dienst startet & nicht, dass ich den Behälter nicht läuft

prüfen docker ps -a, um zu sehen, ob ein Behälter gerade verlassen hat: für Ihren Behälter zu laufen, müssen Sie seinen Hauptprozess, um sicherzustellen, im Vordergrund bleibt und tut nicht sofort beenden.

Probieren Sie das Docker-Image toke/docker-mosquitto aus, um festzustellen, ob die Container von diesem Container bestehen bleiben.

+0

Das ist, was ich sagen wollte: nach 'Docker Starten' und' Docker ps -a' meine Container Staaten 'exited'. Ich würde gerne meine eigene Dockerfile verwenden, weil ich etw. Mehr. Die obige Dockerdatei ist nur ein minimaler Ausschnitt für die Wiedergabe. – Munchkin

+0

@Munchkin Das bedeutet, dass Ihr Hauptbefehl sofort gestartet und beendet wird. Versuchen Sie, Ihr Bild wie https://github.com/toke/docker-mosquitto zu konfigurieren. – VonC

+0

Ich habe gerade in dieses Repo geschaut. Macht 'CMD ["/ usr/sbin/mosquitto", "-c", "/mqtt/config/mosquitto.conf"] 'mosquitto als Dienst, wie' service mosquitto start'? – Munchkin

0

Die Verwendung eines Containers als Möglichkeit, einen Host-Dienst zu starten, scheint mir den Sinn von Containern zu vermissen. Apps, die "containerisiert" sind, sollten so gestaltet sein, dass sie jederzeit gestartet/gestoppt werden können. Wenn Sie nach einem Container mit langer Laufzeit suchen, der einen Dienst bereitstellt, der immer ausgeführt werden soll, fügen Sie die Option --restart=always zum Befehl docker run hinzu. Wenn der Host gestartet/neu gestartet wird und der Docker-Dienst gestartet wird, wird der Container automatisch gestartet. Eine gute Liste der & Don'ts des do über containerisierter Apps ist The 12 Factor App

Verwandte Themen