andrius/asterisk:alpine-20.5.2镜像构建时pjproject编译出错求助
问题场景
使用andrius/asterisk:alpine-latest-20.5.2基础镜像,搭配自定义拨号计划和外呼AGI脚本,执行docker-compose时触发Asterisk构建报错,Node.js相关构建正常。错误核心为pjproject编译阶段失败:
133.4 [pjproject] Compiling libpj-x86_64-unknown-linux-gnu.a
134.1 make[2]: *** [Makefile:213: source/pjlib/lib/libpj-x86_64-unknown-linux-gnu.a] Error 2
134.1 make[1]: *** [Makefile:47: pjproject] Error 2
134.1 make: *** [Makefile:396: third-party] Error 2failed to solve: process "/bin/sh -c cd /usr/src && curl -O https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz && tar -xzf asterisk-20-current.tar.gz && cd asterisk-20.* && ./configure --with-pjproject --without-bdb && make menuselect.makeopts && menuselect/menuselect --disable-category MENUSELECT_UTILS && make && make install && make samples && make config"
did not complete successfully: exit code: 2
解决办法
1. 直接复用预编译镜像(推荐)
既然已经使用现成的andrius/asterisk:alpine-latest-20.5.2镜像,无需重新下载编译Asterisk。修改Dockerfile,基于该镜像直接复制自定义文件:
# 以现成Asterisk镜像为基础 FROM andrius/asterisk:alpine-latest-20.5.2 # 复制自定义拨号计划 COPY ./extensions.conf /etc/asterisk/extensions.conf # 复制外呼AGI脚本到指定目录 COPY ./your-outbound-agi-scripts/ /var/lib/asterisk/agi-bin/ # 给AGI脚本添加执行权限 RUN chmod +x /var/lib/asterisk/agi-bin/*
这种方式跳过编译步骤,彻底避免依赖缺失导致的编译错误。
2. 补全编译依赖(若必须自行编译)
如果一定要重新编译Asterisk,需先在镜像中安装pjproject及编译所需的依赖包,在构建步骤前添加:
RUN apk add --no-cache \ build-base \ linux-headers \ openssl-dev \ ncurses-dev \ libxml2-dev \ sqlite-dev \ jansson-dev \ libsrtp-dev \ pjproject-dev
同时调整configure命令,让Asterisk使用系统安装的pjproject:
./configure --without-bdb --with-pjproject=/usr
内容的提问来源于stack exchange,提问作者Lawrence Makoro

