树莓派4 Docker环境安装PHP扩展mysqli、pdo_mysql、zip无响应求助
问题排查与解决方案
核心原因
树莓派属于ARM架构设备,你遇到的卡顿绝大多数是三类问题:国外软件源访问不稳定、本地编译扩展时硬件算力/内存不足、架构适配相关的依赖缺失。
分步排查方案
第一步:定位卡顿具体环节
进入运行中的PHP容器后,执行带verbose参数的安装命令输出详细日志,确认卡在哪一步:docker-php-ext-install -v mysqli如果日志卡在
apt install相关的依赖拉取步骤,属于源的问题;如果卡在configure或make步骤,属于编译时资源不足的问题。第二步:替换容器内软件源为国内ARM镜像站
树莓派默认的Debian官方源访问速度极慢,拉取依赖时会长期无响应,在Dockerfile的apt update步骤前新增源替换逻辑:# 替换为中科大ARM架构Debian源 RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list第三步:解决编译资源不足问题
2G及以下内存的树莓派编译PHP扩展时容易因内存不足进入IO等待状态,优先两个方案:- 直接使用预编译扩展,放弃本地编译:不需要用
docker-php-ext-install,直接通过apt安装系统预编译的扩展包,速度提升10倍以上:
RUN DEBIAN_FRONTEND=noninteractive apt install -y php7.4-mysql php7.4-zip- 临时增大树莓派交换分区到2G,避免编译时OOM,操作方式为在树莓派宿主机执行:
sudo dphys-swapfile swapoff sudo sed -i 's/CONF_SWAPSIZE=.*/CONF_SWAPSIZE=2048/g' /etc/dphys-swapfile sudo dphys-swapfile setup sudo dphys-swapfile swapon- 直接使用预编译扩展,放弃本地编译:不需要用
第四步:排查网络配置问题
进入容器后执行ping mirrors.ustc.edu.cn确认网络连通性,若出现解析失败的情况,给Docker daemon添加公共DNS配置:
修改/etc/docker/daemon.json新增:{ "dns": ["114.114.114.114", "8.8.8.8"] }之后重启docker服务生效。
可用Dockerfile示例
FROM php:7.4-apache LABEL maintainer="dev@chialab.io" # 替换为国内ARM源 RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -qq -y curl php7.4-mysql php7.4-zip RUN a2enmod rewrite
内容的提问来源于stack exchange,提问作者Sam Zadworny
相关产品推荐
相关产品推荐

