Dockerfile构建容器 nginx+php nginx不会自动启动
# 设置基础镜像
FROM php:8.2-fpm
# 更新系统
RUN apt-get update && apt-get upgrade -y
# 安装 Nginx 和其他依赖
RUN apt-get install -y nginx libmcrypt-dev libicu-dev libzip-dev zip unzip git net-tools &&
docker-php-ext-install pdo_mysql mysqli intl zip opcache
# 添加 Nginx 配置文件
COPY laravel.conf /etc/nginx/conf.d/larave.conf
# 暴露端口
EXPOSE 80
CMD service nginx start
使用CMD service nginx start 以后容器起不来 不适用的话nginx又不会启动
请大哥们分享一下自用的dockerfile 万分感谢
你缺失了很多基础知识,我大概给你系统的讲一下吧:
Linux程序启动方式我们俗称的有两种:前台启动、后台启动。
一个docker容器要存活,必须有一个前台启动方式的进程去维持它,不然它会退出。
你基于
FROM php:8.2-fpm
做的镜像,它最后的一行本来是CMD ["php-fpm"]
,你再写的CMD service nginx start
就会覆盖前面的CMD
,但是你的service nginx start
命令是后台启动方式,所以你的容器相当于没有一个前台启动方式的进程去维持它,所以会退出。你可以按如下方式修改:
CMD ["sh", "-c", "service nginx start && php-fpm"]
每个人环境不同,配置不同,也许上面的启动顺序,你可能会遇到nginx报错说找不到127.0.0.1:9000,这时候怎么办呢,懂了原理其实也挺简单的,我们换一下顺序,让php先后台启动,然后nginx再前台启动,如:
先将
php-fpm.conf
里面的配置改为daemonize = yes
,然后CMD ["sh", "-c", "php-fpm && nginx -g 'daemon off;'"]