J'essaie de créer un fichier Docker qui lancera Apache automatiquement. Rien n'a fonctionné. Mais si je me connecte au conteneur et exécute service Apache2 start
cela fonctionne. Pourquoi ne puis-je pas exécuter cette commande à partir de mon fichier Dockerfile?
FROM ubuntu
# File Author / Maintainer
MAINTAINER rmuktader
# Update the repository sources list
RUN apt-get update
# Install and run Apache
RUN apt-get install -y Apache2 && apt-get clean
#ENTRYPOINT ["/usr/sbin/Apache2", "-k", "start"]
#ENV Apache_RUN_USER www-data
#ENV Apache_RUN_GROUP www-data
#ENV Apache_LOG_DIR /var/log/Apache2
EXPOSE 80
CMD service Apache2 start
Le problème est ici: CMD service Apache2 start
Lorsque vous exécutez cette commande, le processus Apache2
sera détaché du shell. Mais Docker ne fonctionne que lorsque le processus principal est actif.
La solution consiste à exécuter Apache dans le foreground. Dockerfile
doit ressembler à ceci: (seule la dernière ligne a été modifiée).
FROM ubuntu
# File Author / Maintainer
MAINTAINER rmuktader
# Update the repository sources list
RUN apt-get update
# Install and run Apache
RUN apt-get install -y Apache2 && apt-get clean
#ENTRYPOINT ["/usr/sbin/Apache2", "-k", "start"]
#ENV Apache_RUN_USER www-data
#ENV Apache_RUN_GROUP www-data
#ENV Apache_LOG_DIR /var/log/Apache2
EXPOSE 80
CMD apachectl -D FOREGROUND
Pour moi, la dernière ligne avec CMD était fausse:
# it helped me
CMD ["apachectl", "-D", "FOREGROUND"]