webentwicklung-frage-antwort-db.com.de

DOCKERFILE: Mehrere CMD ausführen. (Starten von NGINX und PHP)

Ich habe eine Docker-Datei, die NGINX einrichtet, PHP, ein Wordpress-Repository hinzufügt. Ich möchte beim Booten PHP und NGINX starten. Ich versäume es jedoch. Ich habe versucht, die beiden Befehle in das CMD-Array einzufügen, und ich habe auch versucht, sie in eine Shell-Datei einzufügen und die Shell-Datei zu starten. Nichts hat geklappt. Unten ist meine Dockerfile

FROM ubuntu:16.04

WORKDIR /opt/

#Install nginx
RUN apt-get update
RUN apt-get install -y nginx=1.10.* php7.0 php7.0-fpm php7.0-mysql

#Add the customized NGINX configuration
RUN rm -f /etc/nginx/nginx.conf
RUN rm -f /etc/nginx/sites-enabled/*

COPY nginx/nginx.conf /etc/nginx/
COPY nginx/site.conf /etc/nginx/sites-enabled

#Copy the certificates
RUN mkdir -p /etc/pki/nginx
COPY nginx/certs/* /etc/pki/nginx/
RUN rm -f /etc/pki/nginx/placeholder

#Copy the build to its destination on the server
RUN mkdir -p /mnt/wordpress-blog/
COPY . /mnt/wordpress-blog/

#COPY wp-config.php
COPY nginx/wp-config.php /mnt/wordpress-blog/

#The command to run the container
CMD ["/bin/bash", "-c", "service php7.0-fpm start", "service nginx start"]

Ich habe versucht, die Befehle in der CMD in einer Shell-Datei abzulegen und die Shell-Datei im CMD-Befehl auszuführen. Es hat immer noch nicht funktioniert. Was vermisse ich?

5

start.sh

#!/bin/bash

/usr/sbin/service php7.0-fpm start
/usr/sbin/service nginx start
tail -f /dev/null

Dockerfile

COPY ["start.sh", "/root/start.sh"]
WORKDIR /root
CMD ["./start.sh"]

Auf diese Weise können Sie komplexere Logik in start.sh einfügen.

3
lagom

Sie können die CMD-Leitung für einige ersetzen, wie ...

CMD ["/bin/bash", "-c", "/usr/sbin/service php7.0-fpm start && nginx -g 'daemon off;'"]

2
SilvioQ

TL; DR: Sie haben keinen Einstiegspunkt.

Die Hauptidee im Docker ist, eine Verantwortung pro Container zu haben. Damit ein Docker-Container weiterhin ausgeführt werden kann, muss beim Booten des Containers ein Programm im Vordergrund gestartet werden.

In Ihrer Docker-Datei gibt es jedoch keinen Eintrag, um ein Programm im Vordergrund zu starten. Kurz nach dem Start des Containers wird der Container beendet.

Um zu verhindern, dass Ihr Container beendet wird, starten Sie einfach ein Programm im Vordergrund.

Nginx zum Beispiel.

Beispielszenario:

entrypoint.sh Inhalt:

#!/bin/bash
service php7.0-fpm start
nginx -g 'daemon off;

irgendwo in Dockerfile:

COPY [ "./entrypoint.sh", "/root/entrypoint.sh" ]

am Ende der Dockerfile:

ENTRYPOINT /root/entrypoint.sh
0
Yarimadam