一个 docker 环境下奇怪的问题,搞了一宿也没搞定。
概述问题
macos+docker 本机环境,PHP 项目,代码跑到阿里云 OSS SDK 的 uploadFile 方法出问题,现象是类似直接卡死,容器内的网站也直接访问不了了,转圈圈,restart 容器恢复访问,但问题依旧,本人菜鸡,追了一宿的代码大概得出以下测试结果,望大神赐教
ps:这项目代码在原 windows 本机环境和线上 centos 环境都没任何问题。
核心代码
// 首先第三个参数就是传本地文件路径,写成下面这样,$_FILES["file"]['tmp_name'] 就会导致容器好像卡死,这个值一般是 /tmp/phpXXXX // 而我进入容器手动在 /tmp 目录下创建一个文件比如 touch test,然后第三个参数写 /tmp/test,代码就可以跑通,我就很是纳闷。 $res = $ossClient->uploadFile($config['bucket'], $ossFileName, $_FILES["file"]['tmp_name']);
出问题时的容器 log 大概样子
[20-Feb-2021 20:05:32] WARNING: [pool www] child 9, script '/www/ShengXin/CRM/index.php' (request: "POST /index.php") executing too slow (3.063820 sec), logging [20-Feb-2021 20:05:32] NOTICE: child 9 stopped for tracing [20-Feb-2021 20:05:32] NOTICE: about to trace 9 [20-Feb-2021 20:05:32] ERROR: pread() failed: I/O error (5) [20-Feb-2021 20:05:32] NOTICE: finished trace of 9
当出问题,卡死时追到具体的代码入下图
https://user-images.githubusercontent.com/20442232/108598409-52847d00-73c8-11eb-8be6-e5b0b6bff139.png
刚开始用 docker 做本地环境,菜鸡求教,本菜分析两个原因,一个是文件目录权限的问题很大,很小是 curl 的问题,望大神指条明路