docker配置nginx+php各种坑

docker部署nginx+php的介绍很多,我也是安装上面的来部署,发现各种坑,在这给列举下,供大家参考。
1、安装好docker的nignx 和php
2、修改nginx.conf配置,加上php解析
其中
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME documentroot document_rootdocument
r

ootfastcgi_script_name;
fastcgi_pass 172.17.0.3:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}

出现502 gateway错误
这里的fastcgi_pass要是phprpm容器的内网ip地址,而不是127.0.0.1

出现404 file not found
其实nginx版本不通,document_root高版本已不支持,写成绝对路径,但大部署介绍写的是宿主机路径,这是错的。要写成phpfpm容器内的路径,如:/var/www/html
还有我在安装phpfpm时挂载文件时-v宿主机要写到:后面
还碰到进容器后无权限,要在-v挂载后加–privileged=true
有的说要去修改phpfpm的配置文件把listen 127.0.0.1改成0.0.0.0这是不需要的
以上应该就能访问通了

如果部署的时候有权限不足
那要把宿主机对应的html文件夹设置成777

有的需要php特殊插件
phpfrm内有docker-php-ext-install命令
进入phpfrm容器内执行即可,如扩展mysql执行 docker-php-ext-install pdo pdo_mysql
如果ext里面没有还可以用如下的

apt update #更新软件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库
docker-php-source extract #解压源码
cd /usr/src/php/ext/gd #gd源码文件夹
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译
docker-php-ext-install gd #编译安装
php -m | grep gd

在所有环境都成功部署好后,有的在运行应用时,会出现"Primary script unknown"错误,一般这是由于nginx和php-fpm的用户不同导致的。把nginx.conf和php-fpm.d/www.conf 的user设为同一个就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 Docker 中安装 NginxPHP 的基本步骤: 1.首先,从 Docker Hub 下载最新版本的 Nginx 镜像: ``` docker pull nginx ``` 2.接下来,从 Docker Hub 下载最新版本的 PHP 镜像: ``` docker pull php:fpm ``` 3.创建一个名为 `myapp` 的工作目录,并在其中创建以下两个文件: `Dockerfile`: ``` FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf WORKDIR /var/www/html COPY . /var/www/html ``` `default.conf`: ``` server { listen 80; server_name localhost; root /var/www/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 其中,`Dockerfile` 中的 `COPY` 命令将 `default.conf` 文件复制到 Nginx配置文件目录中,`WORKDIR` 命令将工作目录设置为 `/var/www/html`,`COPY .` 命令将 `myapp` 目录中的所有文件复制到工作目录中。 4.在 `myapp` 目录中运行以下命令,创建名为 `mynginx` 的容器: ``` docker run --name mynginx -p 80:80 -v $(pwd):/var/www/html -d mynginx ``` 其中,`-p` 参数将 Docker 容器中的端口 80 映射到主机上的端口 80,`-v` 参数将当前工作目录映射到容器的 `/var/www/html` 目录。 5.在 `myapp` 目录中运行以下命令,创建名为 `myphp` 的容器: ``` docker run --name myphp -v $(pwd):/var/www/html --link mynginx:php -d php:fpm ``` 其中,`--link` 参数将 `mynginx` 容器链接到 `myphp` 容器中的别名 `php` 上,`-v` 参数将当前工作目录映射到容器的 `/var/www/html` 目录。 现在,您已经成功地在 Docker 中安装了 NginxPHP。要测试是否正常工作,请在主机上打开浏览器,输入 `localhost`,您应该可以看到一个 PHP 信息页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值