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_intrandom_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方案。

标签: none

已有 2 条评论

  1. 博主 博主

    博主,是否能再分享一下 升级内核的方法 ? 普通大众也好参考学习下哈

    1. xts xts

      升级内核和安装软件包一样啊,直接 apt-get install -y linux-image-4.4.0-66-generic linux-image-extra-4.4.0-66-generic linux-headers-4.4.0-66-generic

添加新评论