docker离线版安装nginx+php环境踩坑记录

场景:各种原因导致,博主所在公司服务器外网被屏蔽,最开始连docker都是我自己去离线下载再安装的,但是这个会莫名其妙多出很多奇怪的各种配置错误,后面才知道公司内网有docker的下载,但是其他环境没有。于是我我最开始在家里下载了一个php7.2.7和nginx1.140的版本,然后导出再到公司导入到测试服务器里面。

完整docker运行场景和相关配置代码:

1、安装docker就不说了,总之也有些小坑,我们公司是直接

yum install docker

博主之前安装的一直都是

yum install docker-ce docker-ce-cli containerd.io

2、docker导出\导入:博主使用的save导出、load导入方式,这个比较简单,就不多说了

3.查看docker镜像

 4.安装容器:先安装php容器、再安装nginx容器,因为nginx容器要依赖于php容器的安装(红色的是特别要注意的,后面配置nginx有关系的)

docker run --name php74fpm -v /docker/nginx/www:/www -itd 1e81510b4806

docker run --name nginx -p 80:80 -itd -v /docker/nginx/www:/usr/share/nginx/html -v /docker/nginx/conf/conf.d:/etc/nginx/conf.d --link php74fpm nginx:latest

5.新建对应的配置的文件和文件夹

docker cp /docker/nginx/www/index.php nginx:/usr/share/nginx/html

docker cp /docker/nginx/conf/conf.d/default.conf nginx:/etc/nginx/conf.d

nginx的配置文件default.conf如下:(位置)/docker/nginx/conf/conf.d


server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php?{
      fastcgi_pass   php74fpm:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;
      include        fastcgi_params;
    }
}

index.php文件的代码如下:位置/docker/nginx/www


<?php
    echo 1111;
    echo phpinfo();
?>

安装好之后的容器截图:

踩坑1、curl都打不开

解决:申请开放80端口

踩坑2、无法访问,连普通text,html文件都无法访问

解决:折腾nginx配置文件default.conf配置文件以及docker的php和nginx运行命令,终于可以访问普通文件了。

踩坑3:可以访问html文件,无法访问php文件。连接失败,查看docker具体报错信息如下(只放了开头的部分)

ps:附docker查看报错日志命令

docker logs -t -f 容器id

报错信息如下:

connect() failed (111: Connection refused) while connecting to upstream, client:        

解决:

a:刚开始也是各种百度,解决了包括文件权限和nginx、php的用户权限不一致我的问题

b:然后博主就折腾 default.conf这个配置文件,后面看到一篇博文得到启发,说是没有php-fpm(https://blog.csdn.net/weixin_41887155/article/details/107298760?spm=1001.2014.3001.5506) 但是又不方便验证我的设置到底有问题不,于是我记录了docker 的nginx和php运行命令。下班后,用自己的服务器跑了一篇,发现完全没问题,我就重新打包了php和nginx镜像,这次博主选择了nginx最新版和php7.4-fpm版本

c:再次导入,并且折腾了会,发现能正常访问了

这个问题博主总结了几点:

1、是否有加载正常的php-fpm其实可以看php容器运行状态,在端口位置会显示9000/tcp,之前我用的php7.2.7 这个位置我记得很清晰,是空白的。

2、关于default.conf文件的配置问题(前面有我的正常docker命令和这个配置文件)

        2.1: root   /usr/share/nginx/html; 这个其实是nginx的根目录路径

        2.2: fastcgi_pass   php74fpm:9000; 中php74fpm是php的容器的名称,9000是php的默认端口

        2.3:fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name; 这个中的/www/是php的容器里面的对应的源码路径,这个在php容器运行命令有。这个地方的坑我感觉特别多,有说使用/usr/share/nginx/html这个的,也有说使用$script的,也有说使用$document_root 怎么说呢。我这里有点一个一个测试的问题。

        2.3.1:我家里使用/usr/share/nginx/html 这个是正确的,当然这个其实也说得过去。原因无他,因为它和/docker/nginx/www 进行同步nginx容器的时候。而/docker/nginx/www又在php容器和/www/进行同步的 (-v命令)。

        2.3.2 但是到公司上面个方法就行不通,浏览器会报错file no found  而docker会报错 Primary script unknown 只能用/www/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值