Dockerfile to build Asterisk 20.10.0 with chan_sip on ubuntu 22.04 disable pjsip, cdr, db
772
If you need a version with support for PJSIP, then look at this image:
https://hub.docker.com/r/anydict/asterisk20ubuntu22pjsip
Originate Dockerfile
FROM ubuntu:22.04 AS builder
ENV AST_VERSION=20.10.0
RUN set -ex; \
apt-get update; \
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true; \
apt-get install -y --no-install-recommends \
software-properties-common \
build-essential pkg-config \
wget subversion bzip2 patch \
libedit-dev libjansson-dev libsqlite3-dev uuid-dev libxml2-dev \
liburiparser1 libgsm1 libcurl4-openssl-dev libssl-dev; \
cd /usr/src; \
echo "check_certificate = off" >> ~/.wgetrc; \
wget "https://github.com/asterisk/asterisk/archive/refs/tags/${AST_VERSION}.tar.gz"; \
tar xvf ${AST_VERSION}.tar.gz; \
cd /usr/src/asterisk-${AST_VERSION}*/; \
./configure --disable-xmldoc --without-libxslt --without-dahdi ; \
make menuselect/menuselect menuselect-tree menuselect.makeopts; \
menuselect/menuselect --disable BUILD_NATIVE menuselect.makeopts; \
menuselect/menuselect --enable codec_g729a menuselect.makeopts; \
echo "ENABLE chan_sip"; \
menuselect/menuselect --enable chan_sip menuselect.makeopts; \
echo "disable deprecated modules/apps"; \
menuselect/menuselect --disable res_adsi menuselect.makeopts; \
menuselect/menuselect --disable app_adsiprog menuselect.makeopts; \
menuselect/menuselect --disable app_getcpeid menuselect.makeopts; \
echo "disable cdr and db/sql modules/apps"; \
menuselect/menuselect --disable cdr_adaptive_odbc menuselect.makeopts; \
menuselect/menuselect --disable cdr_pgsql menuselect.makeopts; \
menuselect/menuselect --disable cdr_odbc menuselect.makeopts; \
menuselect/menuselect --disable cdr_tds menuselect.makeopts; \
menuselect/menuselect --disable cdr_sqlite3_custom menuselect.makeopts; \
menuselect/menuselect --disable func_cdr menuselect.makeopts; \
menuselect/menuselect --disable cdr_csv menuselect.makeopts; \
menuselect/menuselect --disable app_forkcdr menuselect.makeopts; \
menuselect/menuselect --disable cdr_custom menuselect.makeopts; \
menuselect/menuselect --disable cdr_radius menuselect.makeopts; \
menuselect/menuselect --disable cdr_manager menuselect.makeopts; \
menuselect/menuselect --disable func_odbc menuselect.makeopts; \
menuselect/menuselect --disable res_config_odbc menuselect.makeopts; \
menuselect/menuselect --disable res_odbc menuselect.makeopts; \
menuselect/menuselect --disable cel_odbc menuselect.makeopts; \
menuselect/menuselect --disable res_odbc_transaction menuselect.makeopts; \
menuselect/menuselect --disable cel_pgsql menuselect.makeopts; \
menuselect/menuselect --disable cel_tds menuselect.makeopts; \
menuselect/menuselect --disable cel_sqlite3_custom menuselect.makeopts; \
menuselect/menuselect --disable cel_radius menuselect.makeopts; \
menuselect/menuselect --disable res_config_sqlite3 menuselect.makeopts; \
menuselect/menuselect --disable res_config_pgsql menuselect.makeopts; \
menuselect/menuselect --disable func_db menuselect.makeopts; \
menuselect/menuselect --disable res_sorcery_astdb menuselect.makeopts; \
menuselect/menuselect --disable pbx_realtime menuselect.makeopts; \
echo "disable unused codec"; \
menuselect/menuselect --disable codec_ilbc menuselect.makeopts; \
menuselect/menuselect --disable codec_lpc10 menuselect.makeopts; \
menuselect/menuselect --disable codec_speex menuselect.makeopts; \
menuselect/menuselect --disable format_ogg_vorbis menuselect.makeopts; \
echo "disable unused modules/apps"; \
menuselect/menuselect --disable chan_iax2 menuselect.makeopts; \
menuselect/menuselect --disable chan_motif menuselect.makeopts; \
menuselect/menuselect --disable chan_unistim menuselect.makeopts; \
menuselect/menuselect --disable chan_console menuselect.makeopts; \
menuselect/menuselect --disable chan_audiosocket menuselect.makeopts; \
menuselect/menuselect --disable cel_manager menuselect.makeopts; \
menuselect/menuselect --disable cel_custom menuselect.makeopts; \
menuselect/menuselect --disable res_geolocation menuselect.makeopts; \
menuselect/menuselect --disable res_fax menuselect.makeopts; \
menuselect/menuselect --disable res_xmpp menuselect.makeopts; \
menuselect/menuselect --disable res_stir_shaken menuselect.makeopts; \
menuselect/menuselect --disable res_ael_share menuselect.makeopts; \
menuselect/menuselect --disable res_parking menuselect.makeopts; \
menuselect/menuselect --disable res_agi menuselect.makeopts; \
menuselect/menuselect --disable res_calendar_caldav menuselect.makeopts; \
menuselect/menuselect --disable res_aeap menuselect.makeopts; \
menuselect/menuselect --disable res_calendar menuselect.makeopts; \
menuselect/menuselect --disable res_snmp menuselect.makeopts; \
menuselect/menuselect --disable res_phoneprov menuselect.makeopts; \
menuselect/menuselect --disable res_config_ldap menuselect.makeopts; \
menuselect/menuselect --disable res_smdi menuselect.makeopts; \
menuselect/menuselect --disable res_sorcery_memory_cache menuselect.makeopts; \
menuselect/menuselect --disable res_calendar_ews menuselect.makeopts; \
menuselect/menuselect --disable res_calendar_icalendar menuselect.makeopts; \
menuselect/menuselect --disable res_http_media_cache menuselect.makeopts; \
menuselect/menuselect --disable res_calendar_exchange menuselect.makeopts; \
menuselect/menuselect --disable res_speech_aeap menuselect.makeopts; \
menuselect/menuselect --disable res_resolver_unbound menuselect.makeopts; \
menuselect/menuselect --disable res_hep menuselect.makeopts; \
menuselect/menuselect --disable res_statsd menuselect.makeopts; \
menuselect/menuselect --disable res_stun_monitor menuselect.makeopts; \
menuselect/menuselect --disable res_sorcery_realtime menuselect.makeopts; \
menuselect/menuselect --disable pbx_lua menuselect.makeopts; \
menuselect/menuselect --disable pbx_ael menuselect.makeopts; \
menuselect/menuselect --disable pbx_spool menuselect.makeopts; \
menuselect/menuselect --disable pbx_loopback menuselect.makeopts; \
menuselect/menuselect --disable pbx_dundi menuselect.makeopts; \
menuselect/menuselect --disable func_env menuselect.makeopts; \
menuselect/menuselect --disable func_speex menuselect.makeopts; \
menuselect/menuselect --disable func_srv menuselect.makeopts; \
menuselect/menuselect --disable func_groupcount menuselect.makeopts; \
menuselect/menuselect --disable func_holdintercept menuselect.makeopts; \
menuselect/menuselect --disable func_aes menuselect.makeopts; \
menuselect/menuselect --disable func_devstate menuselect.makeopts; \
menuselect/menuselect --disable func_pitchshift menuselect.makeopts; \
menuselect/menuselect --disable func_cut menuselect.makeopts; \
menuselect/menuselect --disable func_enum menuselect.makeopts; \
menuselect/menuselect --disable func_dialgroup menuselect.makeopts; \
menuselect/menuselect --disable func_sorcery menuselect.makeopts; \
menuselect/menuselect --disable func_presencestate menuselect.makeopts; \
menuselect/menuselect --disable func_math menuselect.makeopts; \
menuselect/menuselect --disable func_periodic_hook menuselect.makeopts; \
menuselect/menuselect --disable app_zapateller menuselect.makeopts; \
menuselect/menuselect --disable app_voicemail menuselect.makeopts; \
menuselect/menuselect --disable app_minivm menuselect.makeopts; \
menuselect/menuselect --disable app_agent_pool menuselect.makeopts; \
menuselect/menuselect --disable app_followme menuselect.makeopts; \
menuselect/menuselect --disable app_chanspy menuselect.makeopts; \
menuselect/menuselect --disable app_jack menuselect.makeopts; \
menuselect/menuselect --disable app_sms menuselect.makeopts; \
menuselect/menuselect --disable app_directory menuselect.makeopts; \
menuselect/menuselect --disable app_externalivr menuselect.makeopts; \
menuselect/menuselect --disable app_speech_utils menuselect.makeopts; \
menuselect/menuselect --disable app_alarmreceiver menuselect.makeopts; \
menuselect/menuselect --disable app_broadcast menuselect.makeopts; \
menuselect/menuselect --disable app_amd menuselect.makeopts; \
menuselect/menuselect --disable app_test menuselect.makeopts; \
menuselect/menuselect --disable app_festival menuselect.makeopts; \
menuselect/menuselect --disable app_disa menuselect.makeopts; \
menuselect/menuselect --disable app_mf menuselect.makeopts; \
menuselect/menuselect --disable app_dictate menuselect.makeopts; \
menuselect/menuselect --disable app_signal menuselect.makeopts; \
menuselect/menuselect --disable app_sf menuselect.makeopts; \
menuselect/menuselect --disable app_page menuselect.makeopts; \
menuselect/menuselect --disable app_mp3 menuselect.makeopts; \
menuselect/menuselect --disable app_directed_pickup menuselect.makeopts; \
menuselect/menuselect --disable app_morsecode menuselect.makeopts; \
menuselect/menuselect --disable app_sendtext menuselect.makeopts; \
echo "disable all pjsip"; \
menuselect/menuselect --disable chan_pjsip menuselect.makeopts; \
menuselect/menuselect --disable res_hep_pjsip menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_session menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_history menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_dtmf_info menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_transport_websocket menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_xpidf_body_generator menuselect.makeopts; \
menuselect/menuselect --disable res_prometheus menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_pidf_body_generator menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_mwi_body_generator menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_empty_info menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_rfc3329 menuselect.makeopts; \
menuselect/menuselect --disable func_pjsip_endpoint menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_messaging menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_notify menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_t38 menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_diversion menuselect.makeopts; \
menuselect/menuselect --disable func_pjsip_aor menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_pidf_digium_body_supplement menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_pidf_eyebeam_body_supplement menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_sips_contact menuselect.makeopts; \
menuselect/menuselect --disable func_pjsip_contact menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_dlg_options menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_refer menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_path menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_endpoint_identifier_anonymous menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_mwi menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_one_touch_record_info menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_caller_id menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_send_to_voicemail menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_endpoint_identifier_user menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_dialog_info_body_generator menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_outbound_registration menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_nat menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_publish_asterisk menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_outbound_publish menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_pubsub menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_endpoint_identifier_ip menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_registrar menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_header_funcs menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_outbound_authenticator_digest menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_acl menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_phoneprov_provider menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_authenticator_digest menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_exten_state menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_rfc3326 menuselect.makeopts; \
menuselect/menuselect --disable res_pjsip_logger menuselect.makeopts; \
make; \
make install; \
make samples; \
make config; \
apt-get remove -y --purge --auto-remove build-essential software-properties-common lib*dev; \
apt-get clean && rm -rf /var/lib/{apt,dpkg,cache,log}; \
rm -rf /usr/src/${AST_VERSION}* && rm -rf /usr/src/asterisk*;
FROM ubuntu:22.04
RUN set -ex; \
apt-get update; \
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true; \
apt-get install -y --no-install-recommends \
wget sox tzdata libedit2 libjansson4 libsqlite3-0 libuuid1 libxml2 \
liburiparser1 libgsm1 libcurl4; \
apt-get clean && rm -rf /var/lib/{apt,dpkg,cache,log};
COPY --from=builder /var/spool/asterisk /var/spool/asterisk
COPY --from=builder /var/lib/asterisk /var/lib/asterisk
COPY --from=builder /var/run/asterisk /var/run/asterisk
COPY --from=builder /usr/lib/asterisk /usr/lib/asterisk
COPY --from=builder /etc/asterisk /etc/asterisk
COPY --from=builder /usr/sbin/astcanary \
/usr/sbin/astdb2bdb \
/usr/sbin/astdb2sqlite3 \
/usr/sbin/asterisk \
/usr/sbin/astgenkey \
/usr/sbin/astversion \
/usr/sbin/autosupport \
/usr/sbin/rasterisk \
/usr/sbin/safe_asterisk \
/usr/sbin/
COPY --from=builder /usr/lib/libasteriskssl.so.1 \
/usr/lib/libasteriskssl.so \
/usr/lib/libasteriskpj.so.2 \
/usr/lib/libasteriskpj.so \
/usr/lib/
ENV TZ=Europe/Moscow
RUN set -ex; \
echo "[modules]">>"/etc/asterisk/modules.conf"; \
echo "autoload=yes">>"/etc/asterisk/modules.conf"; \
echo $TZ > /etc/timezone; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
wget "http://asterisk.hosting.lv/bin/codec_g729-ast180-gcc4-glibc-x86_64-core2-sse4.so" \
-O /usr/lib/asterisk/modules/codec_g729.so;
# if need curl for Global Web
# RUN set -ex; \
# apt-get install -y --no-install-recommends ca-certificates;
CMD [ "asterisk", "-f" ]
Easy-to-run script (Attention! Ports are used from the host machine):
Set your asterisk config in /etc/asterisk_docker-0
Or use sample config: https://github.com/anydict/asterisk_example/tree/main/config_chan_sip
#!/bin/bash
# Run instance with number 2 with version image Asterisk 20.10.0
# bash docker_run_asterisk.sh 2
if [ -z "$1" ]; then
echo "No instance number. Use 0-9" && exit 0
else
instance_name=asterisk_docker-$1
fi
if [ -f "/usr/bin/docker" ]; then
docker_path="/usr/bin/docker"
elif [ -f "/run/host/bin/docker" ]; then
docker_path="/run/host/bin/docker"
else
echo "No found docker in /usr/bin/docker or /run/host/bin/docker" && exit 0
fi
${docker_path} stop "$instance_name"
${docker_path} rm "$instance_name"
host_conf_path="/etc/$instance_name" && mkdir -p "/etc/$instance_name"
host_logs_path="/var/log/$instance_name" && mkdir -p "/var/log/$instance_name"
host_custom_sounds="/var/lib/asterisk/sounds/en/custom" && mkdir -p $host_custom_sounds
host_custom_moh="/var/lib/asterisk/moh" && mkdir -p $host_custom_moh
${docker_path} run \
-d \
--restart=always \
--net=host \
-v "$host_logs_path":/var/log/asterisk/ \
-v "$host_conf_path":/etc/asterisk \
-v "$host_custom_sounds":"$host_custom_sounds" \
-v "$host_custom_moh":"$host_custom_moh" \
--name "$instance_name" \
anydict/asterisk20ubuntu22:20.10.0
Content type
Image
Digest
sha256:41896491c…
Size
146.2 MB
Last updated
almost 2 years ago
docker pull anydict/asterisk20ubuntu22