先报告本人菜鸡一枚 本来在 Mac 下使用 homestead 做开发环境写点 php 和 vue,听说 docker 各种神,最近开始折腾 docker,整体比较顺利,环境也都跑起来了。
问题是一样的项目,一样的代码,线上和 Windows 下都没问题。
在我这个 docker 下就有问题
两个 php 容器 一个 7.3 一个 5.6,7.3 下的项目目前没发现问题,5.6 下的一个旧项目只要执行到阿里云 OSS uploadFile 方法就好像会让整个 php5.6 的容器挂掉,网站直接打不开了,代码和报错如下。
try {
$ossClient = new OssClient($config['accessKeyId'], $config['accessKeySecret'], $config['endpoint']);
// 走到 uploadFile 就挂掉,是$file['tmp_name']文件、目录相关权限的问题?
$res = $ossClient->uploadFile($config['bucket'], $ossFileName, $file['tmp_name']);
//...
docker 容器日志
[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
1
leimao 2021-02-21 08:29:08 +08:00
你这么一说,最近有个朋友在我项目里反映他用 Mac 做 Dockerfile Build 失败,但是我在 Linux 机器上根本重复不出他的问题。
https://github.com/leimao/ONNX-Runtime-Inference/issues/1 Windows 用 Docker 的话,如果没记错是基于 Linux 虚拟机的?虚拟机的话那问题一般不大。 |
2
tlerbao OP @leimao
经过一晚上的测试,发现原因似乎还有可能是目录或文件权限的问题,看下面注释说明,真的是奇怪了。 ``` $ossClient = new OssClient($config['accessKeyId'], $config['accessKeySecret'], $config['endpoint']); // 这里的第三个参数如果我写死,写成我在容器 /tmp 目录手动创建的文件 如 /tmp/test 代码就炮通了 // 但是第三个参数如果写成下面这样 也就是$file['tmp_name'] 这个$file = $_FILES["file"],从表单选择的文件就会卡死 $res = $ossClient->uploadFile($config['bucket'], $ossFileName, $file['tmp_name']); ``` |