You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alpine镜像Docker构建PHP7.4安装imagick报Makefile:192 Error127求助

问题根因

你遇到的make: /bin/sh: Operation not permitted错误和本地宿主机的gcc、build-essential、PATH配置完全无关,Docker容器是隔离运行环境,构建过程依赖的是容器内部的Alpine系统环境,你本地的Ubuntu环境配置不会影响容器内部操作。

该错误的实际原因是:你使用的php:7.4-fpm-alpine镜像底层基于Alpine 3.14及以上版本,该版本使用了新的系统调用,而你宿主机Ubuntu 20.04的默认libseccomp版本、Docker版本较低,seccomp安全模块拦截了Alpine 3.14+需要的系统调用,导致容器内执行shell操作时报权限错误。

解决方案

方案一(最快生效,无需修改宿主机配置)

直接指定使用Alpine 3.13版本的PHP基础镜像,修改Dockerfile的基础镜像语句即可:

# 把原来的 FROM php:7.4-fpm-alpine 替换为下面的内容
FROM php:7.4-fpm-alpine3.13

方案二(适配高版本Alpine镜像,修改宿主机配置)

如果需要使用更高版本的Alpine基础镜像,升级宿主机的相关组件即可:

  • 升级Docker到官方最新稳定版
  • 升级libseccomp依赖包:
    sudo apt update && sudo apt install -y libseccomp2
    

方案三(临时测试用,不建议生产环境使用)

构建时临时关闭seccomp安全限制,构建命令增加参数:

# 原生docker build 命令
docker build --security-opt seccomp=unconfined .

# docker-compose 构建的话,在对应服务的build配置下添加参数
# build:
#   context: .
#   security_opt:
#     - seccomp:unconfined

额外注意事项

  1. 安装imagick扩展前,需要先在Alpine容器内安装对应的依赖包,你需要在PERMANENT_DEPS中添加imagemagick,在.build-deps中添加imagemagick-dev,否则pecl安装时会找不到头文件导致构建失败。
  2. 你之前执行apt show报错是因为命令里的横杠用了中文全角字符,不是build-essential本身的问题。
  3. 你之前在~/.bashrc中添加的build-essential相关PATH配置属于无效操作,可以删除回滚。

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:06:04