记录一次docker构建phalcon项目环境遇到的坑 --- 解决child pid xxx exit signal Illegal instruction (4)

2023-09-05 15:36:38 浏览数 (2)

docker phalcon

前言

Docker 并不是万能的。

如果你在使用docker部署phalcon的运行环境,或者其他需要在docker容器里编译的东西,那么这篇文章或许对你有所启发。

构思

公司有一个很老的验证项目,使用的是phalcon开发,这几天交给我个任务让我在docker里部署一下他的运行环境,达到“一次部署,永久运行”的结果。

先是大致看了一下代码,了解一下phalcon的机制,发现要使用phalcon的话需要针对性的编译他的扩展,于是决定在centos里进行部署,最后打包成tar。

经过

下载docker,使用centos7作为基础镜像。

代码语言:javascript复制
1. 部署php7的运行环境以及开发工具包
2. 下载最新的phalcon源码
3. 进入bulid目录编译扩展
4. 重启web服务器

运行ok!生成镜像!打包!换个环境测试!

这里要补充一句,我的docker部署在虚拟机上,所有的操作都在虚拟机实现,于是很方便开启一台新的虚拟机。

新开一台虚拟机(centos MiNi)测试也正常运行,ok,到公司服务器准备部署!

问题

我明明用的docker,按理说,与世隔绝的环境,应该不会出现意外才对,但就是出了问题。 错误日志如下: AH00052: child pid xxx exit signal Illegal instruction (4)

我做了两套docker容器,分别跑两个项目,一个是这个,另一个是laravel,laravel的项目正常跑通,唯独这个phalcon。

问题出在哪里? 我的机器可以跑,我装了2台虚拟机都可以跑通,唯独到了公司服务器上不行,难道是公司服务器有问题?但是laravel项目可以正常访问啊!

难道是镜像问题?可是我的机器全都正常啊!

解决

排查过程太复杂就不记录了。

最后发现问题出在了phalcon扩展身上,我是在docker里面的php环境下编译的扩展,但是我的机器是i5的CPU,公司服务器是E5的CPU,问题就在这,到公司服务器上重新编译一下扩展,问题被解决。

结论

如果你要在docker容器里编译东西,记得确保运行docker的环境是一致的;报错的话不妨重新编译一下,也许问题就能得到解决。

0 人点赞