基于dunglas/symfony-docker构建PHP7.4容器报php_intl.lo错误如何解决
问题根因
你遇到的make: /bin/sh: Operation not permitted报错本质是低版本Docker与Alpine 3.14+镜像的seccomp系统调用限制不兼容。Alpine 3.14及以上版本默认使用了新的系统调用,而Docker 19.03版本的默认seccomp安全配置没有放开这些调用,会拦截容器内的shell执行、编译等操作,和你容器内的运行权限无关。
可行解决方案
方案1:固定基础镜像为兼容的Alpine版本(无需管理员权限,优先推荐)
直接修改Dockerfile的基础镜像,使用兼容Docker 19.03的Alpine 3.13版本PHP镜像,把原Dockerfile中的:
FROM php:${PHP_VERSION}-fpm-alpine AS symfony_php
替换为:
FROM php:7.4-fpm-alpine3.13 AS symfony_php
如果要保留ARG变量的灵活性,也可以调整为:
ARG PHP_VERSION=7.4 ARG ALPINE_VERSION=3.13 FROM php:${PHP_VERSION}-fpm-alpine${ALPINE_VERSION} AS symfony_php
改完后直接重新执行构建即可,不需要其他配置调整。
方案2:构建时临时关闭seccomp限制(无需管理员权限)
如果不想修改Dockerfile,可以在构建命令中添加安全选项绕过seccomp限制:
- 临时关闭BuildKit(Docker 19.03的BuildKit不支持构建阶段传security-opt参数):
export DOCKER_BUILDKIT=0 export COMPOSE_DOCKER_CLI_BUILD=0
- 执行带安全选项的构建命令:
docker-compose build --security-opt seccomp=unconfined php
方案3:升级Docker版本(需要管理员权限,长期解决方案)
如果可以申请到设备管理员权限,把Docker升级到20.10.0及以上版本,即可彻底解决和新版Alpine镜像的兼容性问题,不需要修改任何项目配置。
内容的提问来源于stack exchange,提问作者Astro-Otter
相关产品推荐
相关产品推荐

