• 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

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. location / {
    5. root /usr/share/nginx/html;
    6. index index.html index.htm index.php;
    7. }
    8. error_page 500 502 503 504 /50x.html;
    9. location = /50x.html {
    10. root /usr/share/nginx/html;
    11. }
    12. location ~ \.php?{
    13. fastcgi_pass php74fpm:9000;
    14. fastcgi_index index.php;
    15. fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
    16. include fastcgi_params;
    17. }
    18. }

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

    1. echo 1111;
    2. echo phpinfo();
    3. ?>

    安装好之后的容器截图:

    踩坑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/

  • 相关阅读:
    基于uclinux 的CAN 总线嵌入式驱动编程
    基于springboot+Vue+ Element-Plus+mysql实现学生宿舍管理系统
    C/C++--跨平台
    蜣螂优化(DBO)算法的5种最新变体(含MATLAB代码)
    七个 LLM 的狼人杀之夜;马斯克的星链残骸会“砸死人”?OpenAI 安全漏洞曝光丨RTE开发者日报 Vol.66
    计算机毕业设计选题推荐-智慧学生宿舍管理系统-Python项目实战
    redis安装(Windows和linux)
    RabbitMQ 模拟实现【六】:程序模拟实现
    5. 用Rust手把手编写一个Proxy(代理), 通讯协议建立, 为内网穿透做准备
    spring boot3登录开发-微信小程序用户登录设计与实现
  • 原文地址:https://blog.csdn.net/u011242029/article/details/127763948