J. *_*Doe 12 php ansible docker
我有这个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"]
Run Code Online (Sandbox Code Playgroud)
基本上,我想要它,以便在docker容器启动时启动php-fpm.我有php-fpm工作,如果我手动进入容器并打开它/usr/sbin/php-fpm.
我用这个命令在我的ansible文件中尝试了它(它没有用).我也试过使用服务模块而没有运气.-
- name: Start php fpm
command: /usr/sbin/php-fpm
Run Code Online (Sandbox Code Playgroud)
我如何让php-fpm与apache一起运行?
oli*_*iaz 12
您应该使用supervisor以启动多个服务
在您的dockerfile中,安装supervisor,然后启动
COPY ./docker/supervisord.conf /etc/supervisord.conf
....
CMD ["/usr/bin/supervisord", "-n"]
Run Code Online (Sandbox Code Playgroud)
而且你docker/supervisord.conf包含了你想要开始的所有服务,所以你可以拥有类似的东西
[program:php-fpm]
command=/opt/remi/php70/root/usr/sbin/php-fpm -c /etc/php-fpm.conf
;command=/usr/sbin/php70-fpm -c /etc/php-fpm.d
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:nginx]
command=/usr/sbin/nginx
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)
当然你应该适应你的路径和php-fpm版本和你的服务(我的例子中的nginx,apache等等),但基本上supervisor是从一个起点管理几个服务的开始的最佳方式.
在这里你可以找到关于主管的码头工人的官方文件
https://docs.docker.com/engine/admin/using_supervisord/
我来到这里寻找如何php-fpm在前台运行,因此它可能是一个docker容器中的PID 1.解决方案是
php-fpm -F -R
Run Code Online (Sandbox Code Playgroud)
我们可以查看可用的选项 php-fpm --help
-F, --nodaemonize
force to stay in foreground, and ignore daemonize option from config file
Run Code Online (Sandbox Code Playgroud)
如果您php-fpm在docker容器中运行,则很有可能以root身份运行该进程.如果没有额外的标志,php-fpm将不会以root身份启动:
-R, --allow-to-run-as-root
Allow pool to run as root (disabled by default)
Run Code Online (Sandbox Code Playgroud)
我最近需要类似的东西.对于alpine linux映像,它足以运行它们php-fpm和web服务器作为容器命令.定义Dockerfile有点像这样:
CMD /usr/bin/php-fpm -D; nginx
Run Code Online (Sandbox Code Playgroud)
即.守护进程php-fpm然后nginx在前台运行.
在Ubuntu的/ Debian的图像也有必要允许通过运行启动最近安装的程序包Dockerfile RUN这样的命令:
RUN echo "exit 0" > /usr/sbin/policy-rc.d
Run Code Online (Sandbox Code Playgroud)
然后php-fpm在CMD命令中重新启动
CMD /etc/init.d/php7.0-fpm restart && nginx -g "daemon off;"
Run Code Online (Sandbox Code Playgroud)
更多关于policy-rc.d被发现在这个askubuntu问题
| 归档时间: |
|
| 查看次数: |
19434 次 |
| 最近记录: |