Comment puis-je commencer à php-fpm dans un conteneur Docker par défaut?
J'ai cette image Docker -
FROM centos:7
MAINTAINER Me <me.me>
RUN yum update -y
RUN yum install -y git https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y ansible
RUN git clone https://github.com/.../dockerAnsible.git
RUN ansible-playbook dockerFileBootstrap.yml
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 80 443 3306
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Fondamentalement, je veux qu'il sorte que php-fpm commence lorsque le conteneur docker commence. J'ai php-fpm de travail si je aller manuellement dans le récipient et de l'activer avec /usr/sbin/php-fpm
.
Je l'ai essayé à l'intérieur de mon ansible fichier avec cette commande (il ne fonctionne pas). J'ai essayé d'utiliser le module de service aussi bien avec pas de chance.-
- name: Start php fpm
command: /usr/sbin/php-fpm
Comment puis-je avoir de php-fpm l'exécution avec apache?
- Ajouter un
RUN /usr/sbin/php-fpm
? - Pas de dés. Il ne veut toujours pas démarrer une fois que le conteneur est démarré à l'aide de ce.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
supervisor
afin de lancer plusieurs servicesDans votre dockerfile, installer superviseur, puis lancer
Et votre
docker/supervisord.conf
contient tous les services que vous souhaitez commencer, vous pouvez donc avoir quelque chose comme çaDe sûr, vous devriez adapter votre chemin et php-fpm versions et vos services (nginx dans mon exemple, apache, etc...), mais, fondamentalement, le superviseur est la meilleure façon de gérer le départ de plusieurs services à partir d'un point de départ.
Ici vous pouvez trouver la doc officielle de docker sur superviseur
https://docs.docker.com/engine/admin/using_supervisord/
Je suis venu ici à la recherche pour savoir comment exécuter
php-fpm
dans le premier plan, alors il pourrait être le PID 1 dans un conteneur docker. La solution estExplication
Nous pouvons vérifier les options disponibles avec
php-fpm --help
Si vous exécutez
php-fpm
dans un conteneur docker, il ya une bonne chance que vous exécutez le processus en tant que root. php-fpm ne démarre pas tant que root sans un indicateur supplémentaire:Je devais chose de similaire récemment. Pour alpin linux des images, il suffit d'exécuter à la fois
php-fpm
et d'un serveur web en tant que conteneur de commande. Défini dansDockerfile
un peu comme ceci:ie. pour daemonize
php-fpm
puis exécuteznginx
au premier plan.Sur ubuntu/debian images, il est également nécessaire de permettre de départ récemment installé des paquets par l'exécution d'un
Dockerfile
RUN
de commande comme ceci:puis redémarrez l'
php-fpm
dans unCMD
commandePlus sur
policy-rc.d
être trouvé dans ce askubuntu questionJ'utilise rc.local pour démarrer les services à l'intérieur d'un conteneur, puis exécuter une commande à l'intérieur de ce conteneur pour exécuter rc.locaux. Alors, voici un exemple d'exécution de commande:
Et c'est l'un de la rc.les fichiers locaux à partir de /etc
Ce que ce n'est le lancement d'un conteneur appelé "mycontainer" à l'aide de l'image "myimage/nom de" avec les ports 80 et 443 sont exposés. Une fois lancé, il appelle mysql, php5-fpm, et nginx pour commencer, faire une pause entre chaque pour 5 secondes. De cette manière, vous pouvez appeler n'importe quel service de départ que vous voulez exécuter à l'intérieur de ce conteneur. N'oubliez pas d'ajouter des ports ouverts pour les services bien que.
Exécuter cette commande va aussi ajouter un "Hello World" dans votre fichier journal toutes les 100 secondes comme une "impulsion" qui vous permettra de savoir quand il était en marche et quand il a été arrêté.
Je crois que @ckeeney la réponse ci-dessus ne peut être reconnue comme la bonne réponse mais j'ai été incapable de le faire fonctionner avec mon cas particulier.
utilisation muet-init
J'ai été en mesure de proxy PID1 par dumb-init, et daemonize PHP-FPM avec la commande suivante :
dumb-init /usr/sbin/php-fpm7.2 -F -R
https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html