Nor*_*gul 4 php nginx docker dockerfile
我想在容器启动时运行 nginx 和 php-fpm,但我似乎无法这样做。这是我的Dockerfile:
FROM php:7-fpm-alpine
EXPOSE 9080 8000
EXPOSE 9088 80
WORKDIR /var/www
COPY . .
RUN apk add nginx composer php7-fpm && \
composer install --no-progress && \
mkdir -p /etc/nginx /etc/nginx/sites-available /etc/nginx/sites-enabled /run/nginx && \
ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf && \
cp nginx.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
容器启动并运行,但是当我运行ps auxnginx时,在我运行nginx命令之前无处可见(配置正常,nginx -t返回正常,并且通过打开的容器运行它确实启动了服务)。
我试图链接,RUN php-fpm7 && nginx但没有任何作用。
也像使用入口点一样ENTRYPOINT ["nginx"]对我没有任何帮助。
如何确保这些进程在创建容器时正在运行?
在同一个容器中运行 2 个进程不是 docker 最佳实践,但我认为这是适合您特定用例的正确方法。幸运的是,docker 为您提供了解决方案。:
使用管理工具 - supervisord。
supervisord 是为编排多个进程而设计的,我认为它比 shell 脚本更好,因为它为您提供了管理和日志记录功能。创建一个supervisord.conf:
[supervisord]
nodaemon=true
logfile=/tmp/supervisord.log
childlogdir=/tmp
pidfile = /tmp/supervisord.pid
[program:php-fpm]
command=php-fpm7 -F
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autorestart=false
startretries=0
[program:nginx]
command=nginx -g 'daemon off;'
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autorestart=false
startretries=0
Run Code Online (Sandbox Code Playgroud)
然后安装并将其复制到您的Dockerfile:
RUN apk add supervisor
COPY ./supervisord.conf /etc/
Run Code Online (Sandbox Code Playgroud)
现在你的入口点应该是:
ENTRYPOINT /usr/bin/supervisord -c /etc/supervisord.conf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6570 次 |
| 最近记录: |