使用php:8.0.10-alpine镜像安装mongodb扩展时make报错如何解决
错误成因
- 首先你的Dockerfile存在语法错误,
FROM指令后不能直接跟&&执行命令,所有安装操作需要放在RUN指令后执行 - 缺少编译mongodb扩展所需的系统依赖,包括gcc、make、openssl-dev、php-dev类编译工具
- 核心触发
/bin/sh: Operation not permitted报错的原因:php:8.0.10-alpine默认基于Alpine 3.14版本构建,该版本对内核系统调用权限做了更严格的限制,当宿主机Docker版本低于20.10.0时,旧版本的seccomp规则会禁止Alpine 3.14内的部分系统调用,导致shell执行失败
解决方法
- 优先将宿主机Docker引擎升级到20.10.0及以上版本,可原生兼容Alpine 3.14+的权限规则
- 若无法升级Docker,可选择两种兼容方案:
- 构建镜像时添加权限参数:
docker build --security-opt seccomp=unconfined . - 换用低版本Alpine的PHP基础镜像,将基础镜像替换为
php:8.0.10-alpine3.13
- 构建镜像时添加权限参数:
- 修正Dockerfile语法,补充编译依赖,示例如下:
FROM php:8.0.10-alpine # 安装编译依赖、安装扩展、清理冗余 RUN set -ex && \ # 安装编译所需依赖 apk add --no-cache --virtual .build-deps \ gcc \ g++ \ make \ openssl-dev \ autoconf \ && \ pecl install mongodb && \ pecl clear-cache && \ echo "extension=mongodb.so" >> /usr/local/etc/php/conf.d/mongodb.ini && \ # 卸载编译依赖减小镜像体积 apk del .build-deps
内容的提问来源于stack exchange,提问作者Ana Carolina Urias Machado
相关产品推荐
相关产品推荐

