被 bug 环绕的一天 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
poembre
V2EX    PHP

被 bug 环绕的一天

  •  
  •   poembre 2021-02-07 00:19:35 +08:00 3267 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    被 bug 环绕的一天

    起因: 由于生产环境 php 没有 redis 扩展

    于是: 换台机器上 docker

    一切搭建完成之后

    发现访问不了

    * 解决:找日志看走到了哪一步; 发现 nginx_error.log 下有如下提示 * 2021/02/06 15:09:17 [error] 397136#397136: *57 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 3.2.2.2, server: -, request: "POST /api/goods/info HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "api.localhost.com" * 大概就是 nginx 通过 fastcgi 协议发给 php-fpm 的时候,给的是宿主机的代码路径 docker 那边找不到脚本代码 

    改完 依旧访问不了

    * 解决:找日志看走到了哪一步; 发现 nginx_error.log 下有如下提示 * 2021/02/06 10:18:25 [error] 398648#398648: *45 connect() failed (111: Connection refused) while connecting to upstream, client: 3.2.2.2, server: -, request: "POST /api/goods/info HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "localhost" * 这个提示就有点困难了 找 php 的错误日志 发现 timeout * 突然想起 忘记把 mysql 加白名单,PHP 连接过去被 about 

    疑问 为啥没走 try catch 而直接 about 至少接口也应正常输出错误 json

    * 解决: 找日志看走到了哪一步;为啥没有抛出错误 * 单步调试大法,最终定位 * pdo 连接没加超时参数 

    改完 依旧访问不了

    * 解决:继续看日志,前面已经把 异常报错调好 这次直接看到 没有 redis 扩展 吐血 * PHP message: PHP Fatal error: Uncaught Error: Class 'Redis' not found in * 由于宿主机没有 php 环境, 打算去借个 docker 镜像。 结果 没有借到就借了个思路 * 直接进入 docker pecl 安装 redis * 有点新鲜,还可以这样 1. docker 容器中安装 php 扩展 1.1 进入 docker container exec -it f9d065a71599 /bin/bash 1.2 安装 redis 、swoole 扩展 #安装 pecl wget http://pear.php.net/go-pear.phar -O go-pear.php php go-pear.php ##回车默认安装 #使用 pcel 命令安装 /usr/local/bin/pecl install redis /usr/local/bin/pecl install swoole 2. 重启 php-fpm: ps aux|grep php-fpm root 42891 0.0 0.1 182796 1220 ? Ss 4 月 18 0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) nobody 42892 0.0 0.6 183000 6516 ? S 4 月 18 0:07 php-fpm: pool www nobody 42893 0.0 0.6 183000 6508 ? S 4 月 18 0:17 php-fpm: pool www 重启 php-fpm: kill -USR2 42891 3.备份当前已经改好的实例为镜像 docker commit -a "php-fpm-add-redis222" -m "php-fpm-add-redis222" f9d065a71599 php-fpm-redis2:php-fpm2 

    改完 依旧访问不了

    * 解决: 根据个人猜想 是因为 docker 内部无法访问外网域名 * docker 启动的时候 加个参数指定使用 * --network=host host 模式可以让容器共享宿主机网络栈,这样的好处是外部主 机与容器直接通信,但是容器的网络缺少隔离性 * --add-host=域名:ip 添加外网域名和 IP 对应信息到容器中的 /etc/hosts 

    改完 成功了 总耗时 1 天

    第 1 条附言    2021-02-07 17:43:52 +08:00
    对不起 ,写标题的时候太草率;当时就想改来着,然额,我想重新编辑的时候 不知道在哪编辑 。

    准备改为, PHP 程序员的头发到底是因为什么事情而脱落。 (ps:版主看到求帮个忙)
    6 条回复    2021-02-07 17:50:40 +08:00
    THESDZ
        1
    THESDZ  
       2021-02-07 10:01:32 +08:00   1
    docker 有端口映射的....你这哪里是 bug 啊,是没看文档
    yeept
        2
    yeept  
       2021-02-07 10:34:51 +08:00
    我记得默认情况 只要宿主机能访问外部网络docker 默认通过网桥也可以访问外部网络。
    debuggerx
        3
    debuggerx  
       2021-02-07 10:38:38 +08:00
    这确实不叫 BUG……
    akagishigeru
        4
    akagishigeru  
       2021-02-07 11:23:56 +08:00
    这确实是你没好好看 Docker 文档
    qingfengxulai1
        5
    qingfengxulai1  
       2021-02-07 13:38:33 +08:00
    这个字体是什么字体?
    poembre
        6
    poembre  
    OP
       2021-02-07 17:50:40 +08:00
    确实没看 docker 文档, 平常用 golang 较多,也没怎么实操过 docker 。关于最后一条,我主要是为了加 --add-host 将代码中的外部 api 域名解析到指定机器去。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2389 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 01:25 PVG 09:25 LAX 18:25 JFK 21:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86