2016-09-20 4 views
1

Ich bin neu in Docker. Versuch, ein kleines Bild mit Übertragung zu bauen. Hier ist meine Dockerfile:Dockerfile CMD/ENTRYPOINT

#base image 
FROM alpine:latest 

#install Transmission 
RUN apk update 
RUN apk add transmission-daemon 

#expose port 
EXPOSE 9091 

#start app 
CMD ["/usr/bin/transmission-daemon"] 

Dann beginne ich Behälter:

docker run transmission 

und es sofort beendet. Ich nehme an, dass es weiter läuft, da der Transmission-Daemon laufen sollte. Ich versuchte ENTRYPOINT auch, aber das Ergebnis ist das gleiche. Die nächste Version funktioniert jedoch wie erwartet:

ENTRYPOINT ["/usr/bin/transmission-daemon"] 
CMD ["-h"] 

Es läuft, zeigt Übertragungshilfe und beendet. Was fehlt mir daran, wie Docker Apps in Containern ausführt?

+0

vergleichen mit https://hub.docker.com/r/jess/transmission/~/dockerfile/ Die letzten 2 Zeilen sind 'ENTRYPOINT ["/usr/bin/transmission-daemon "] CMD [" --allowed "," 127. *, 10. *, 192.168. *, 172.16. *, 172.17. *, 172.18. *, 172.19. *, 172.20. *, 172.21. *, 172.22. *, 172.23. *, 172.24. * , 17' – user2915097

+0

Sie sagen 'Es läuft, zeigen Übertragungshilfe und beendet.' das ist normal, Sie bitten es, die Hilfe anzuzeigen, wenn Sie fertig sind, ist es vorbei – user2915097

Antwort

3

Docker hält einen Container so lange in Betrieb, wie der Prozess, den der Container startet, aktiv ist. Wenn Ihr Container bei der Ausführung einen Daemon startet, ist das Daemon-Startskript der Prozess, den Docker überwacht. Wenn dies abgeschlossen ist, wird der Container beendet - da Docker den Hintergrundprozess, den das Skript hervorbringt, nicht beobachtet.

Typischerweise Ihre CMD oder ENTRYPOINT den interaktiven Prozess statt die daemonisierte Version laufen, und Sie lassen Docker kümmern, den Behälter im Hintergrund mit docker run -d setzen. (Der tatsächliche Unterschied zwischen CMD und ENTRYPOINT ist etwa giving users flexibility to run containers from your image in different ways).

Es lohnt sich, den Docker Hub zu überprüfen, wenn Sie eine etablierte App in einem Container ausführen möchten. There are a bunch of Transmission images on Docker Hub können Sie direkt verwenden oder überprüfen Sie ihre Dockerfiles, um zu sehen, wie das Bild erstellt wird.