3CX is a software-based open standards IP PBX that offers complete Unified Communications
100K+
You can find the GitHub repo at https://github.com/ekondayan/docker-3cx
!!! Important note If you run the container on an APPARMOR enabled machine you have to add "--security-opt apparmor=unconfined" to the run command.
!!! Important note If you have enabled docker namespaces, you have to change the permissions of some files and directories within the container. See the section at the end of the description
Create a macvlan network. This is an example and you have to translate this command to map your needs.
docker network create
-d macvlan
--subnet 192.168.1.0/24
--gateway 192.168.1.1
-o parent=eth0 mv_eth0
docker run
-d
--hostname {YOUR HOSTNAME}
--memory {MEMORY}
--memory-swap {SWAP MEMORY}
--ip {IP ADDRESS}
--network mv_eth0
--restart unless-stopped
-v 3cx_backup:/mnt/backup
-v 3cx_recordings:/mnt/recordings
-v 3cx_log:/var/log
-v /sys/fs/cgroup:/sys/fs/cgroup:ro
--cap-add SYS_ADMIN
--cap-add NET_ADMIN
--name 3cx
farfui/3cx:18.0.2.314
docker exec 3cx timedatectl set-timezone {YOUR ZONE INFO}
docker exec -ti 3cx /usr/sbin/3CXWizard --cleanup
#!/bin/bash
VERSION=18.0.2.314
USER=farfui
docker rmi ${USER}/3cx:${VERSION}
docker build \
--force-rm \
--no-cache \
--build-arg BUILD_STRING="$(date -u)" \
--build-arg BUILD_DATE="$(date +%d-%m-%Y)" \
--build-arg BUILD_TIME="$(date +%H:%M:%S)" \
-t 3cx_stage1 .
docker run \
-d \
--privileged \
--name 3cx_stage1_c 3cx_stage1
docker exec 3cx_stage1_c bash -c \
" systemctl mask systemd-logind console-getty.service [email protected] getty-static.service [email protected] [email protected] getty.target \
&& systemctl enable nginx exim4 postgresql \
&& echo 1 | apt-get -y install 3cxpbx"
docker stop 3cx_stage1_c
docker commit 3cx_stage1_c ${USER}/3cx:${VERSION}
docker push ${USER}/3cx:${VERSION}
docker rm 3cx_stage1_c
docker rmi 3cx_stage1
FROM debian:stretch
ARG BUILD_STRING
ARG BUILD_DATE
ARG BUILD_TIME
LABEL build.string $BUILD_STRING
LABEL build.date $BUILD_DATE
LABEL build.time $BUILD_TIME
ENV DEBIAN_FRONTEND noninteractive
ENV LANG en_US.UTF-8
ENV LANGUAGE en
ENV container docker
RUN apt-get update -y \
&& apt-get upgrade -y \
&& apt-get install -y --allow-unauthenticated \
apt-utils \
wget \
gnupg2 \
systemd \
locales \
&& sed -i 's/\# \(en_US.UTF-8\)/\1/' /etc/locale.gen \
&& locale-gen \
&& wget -O- http://downloads.3cx.com/downloads/3cxpbx/public.key | apt-key add - \
&& echo "deb http://downloads.3cx.com/downloads/debian stretch main" | tee /etc/apt/sources.list.d/3cxpbx.list \
&& apt-get update -y \
&& apt-get install -y --allow-unauthenticated \
net-tools \
$(apt-cache depends 3cxpbx | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ') \
&& rm -f /lib/systemd/system/multi-user.target.wants/* \
&& rm -f /etc/systemd/system/*.wants/* \
&& rm -f /lib/systemd/system/local-fs.target.wants/* \
&& rm -f /lib/systemd/system/sockets.target.wants/*udev* \
&& rm -f /lib/systemd/system/sockets.target.wants/*initctl* \
&& rm -f /lib/systemd/system/basic.target.wants/* \
&& rm -f /lib/systemd/system/anaconda.target.wants/*
EXPOSE 5015/tcp 5001/tcp 5060/tcp 5060/udp 5061/tcp 5090/tcp 5090/udp 9000-9500/udp
CMD ["/lib/systemd/systemd"]
Enter the container:
docker exec -ti 3cx bash
Install the nano text editor:
apt-get install nano
Create a systemd service file:
nano /usr/lib/systemd/user/3cx_fix_perms.service
with the following content:
[Unit]
Description=Fix 3CX permissions
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/3cx_fix_perms.sh
[Install]
WantedBy=multi-user.target
systemctl enable 3cx_fix_perms3cx_fix_perms.sh under /#!/bin/bash
# Ownership fix for su/sudo
chown root:root /bin/su
chown root:root /usr/bin/sudo
chown root:root /usr/lib/sudo/sudoers.so
chown root:root /etc/sudoers
chown -R root:root /etc/sudoers.d
chmod +s /usr/bin/sudo
# Make postgres able to access its CFGs
chown -R root:postgres /etc/postgresql
chown -R root:postgres /etc/postgresql-common
# Recreate fresh postgres db, if does not exist yet and fix perms
chown -R postgres:postgres /var/lib/postgresql
DBVER=9.6
DBPATH=/var/lib/postgresql/$DBVER/main
if [ ! -e "$DBPATH" ]; then
mkdir -p $DBPATH
chown -R postgres:postgres /var/lib/postgresql
sudo -u postgres /usr/lib/postgresql/$DBVER/bin/initdb $DBPATH
fi
# Postgres wants to access this private SSL key
chown root:postgres /etc/ssl/private
chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key
chmod g-r /etc/ssl/private/ssl-cert-snakeoil.key
The plan is to move this script into the container, but for now the user has to create it manually
Emil Kondayan
Content type
Image
Digest
sha256:ef7857c3a…
Size
446.8 MB
Last updated
over 2 years ago
docker pull farfui/3cx:18.0.9.20