PHP 7.0.16 在阿里云容器服务中Could not gather sufficient random data问题的解决办法
最近一个在公司内部环境测试正常的PHP7.0.16容器发布到阿里云容器服务后，调用random_bytes函数回报Could not gather sufficient random data错误。上网搜了一圏看到是这个Patch导致的。如果PHP在新版系统内核中编译，PHP会使用新版内核中提供的getrandom调用来取得随机数，而不会读取/dev/urandom，如果把它移到旧版内核的系统上运行，random_int和random_bytes函数就会报Could not gather sufficient random data。 阿里云的容器服务默认用的是Ubuntu 14.04 3.13.60-generic版本的内核，我的PHP容器是在Ubuntu 16.04 4.9.12-moby内核中编译构建的，所以会触发这个问题。解决方法是升级阿里云的容器服务节点，把内核升级到4.x之后此问题就没有发生了。希望未来的PHP版本会提供getrandom失败后的fallback方案。