使用docker安装好php和nginx后,配置nginx运行php-fpm中间也花费了不少时间,坑也比较多下面说下我的部署过程
1.拉取官方镜像
docker pull nginx
docker pull bitnami/php-fpm
复制代码
2.使用php-fpm镜像开启php-fpm应用容器
docker run -d --name myFpm -v /var/www/html:/usr/share/nginx/html bitnami/php-fpm
复制代码
-d 后台运行容器的意思 -v 指定宿主机与容器的映射关系。/var/www/html为宿主机的项目目录(自定义的),/usr/share/nginx/html为nginx服务器项目默认的路径。
3.开启nginx容器
docker run -d --name myNginx -p 8080:80 -v /var/www/html:/usr/share/nginx/html nginx
复制代码
-p : 该参数设置端口对应的关系。所有访问宿主机8080端口的URL会转发到nginx容器的80端口。
4.查看php-fpm的ip地址,配置nginx用
docker inspect myFpm | grep IPAddress
5.修改nginx配置
进入容器
docker exec -it myNginx /bin/bash
复制代码
-i : --interactive,交互模式。 -t : --tty,开启一个伪终端。 /bin/bash : 必须写,否则会报错。这是开始伪终端时,进入bash界面,也就是命令行界面。
查看对应的配置文件位置
/etc.nginx.conf.d/default.conf
复制代码
6.复制配置文件到usr路径下
进入usr目录下
/usr/share/nginx/html
复制代码
若没有nginx文件夹,自己创建mkdir nginx
复制nginx容器中的默认配置
docker cp myNginx:etc/nginx/conf.d/default.conf ./default.conf
复制代码
这样就在当前路径下生成了一个默认配置
vim default.conf编辑
location ~ \.php$ {
fastcgi_pass 你的php-fpmIP 地址:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;
}
复制代码
保存退出 然后同步配置到容器中
docker cp ./default.conf myNginx:/etc/nginx/conf.d/default.conf
复制代码
进入nginx容器重新加载配置
docker exec -it myNginx /bin/bash
service nginx reload
复制代码
大功告成了吗,不存在的
访问127.0.0.1:8080/info.php
出现 file not found,美滋滋.
注意nginx中的配置
location ~ \.php$ {
fastcgi_pass 172.17.0.2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;
}
复制代码
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
复制代码
这一条要改成这样,/scripts是一个目录名,也就是你站点的根目录,比如说,你访问/index.php这个文件,其实就是访问操作系统中/scripts/index.php这个文件,但是文件并不存在,要改成当前的nginx服务器路径.
复制代码