I am trying to convert a linux distro(RasPBX) into a docker container. So, far I was able to deploy the container, its runs without the desired outcome. Here is the docker file and dockerignore file:
FROM debian:buster-slim
Copy the whole system except what is specified in .dockerignore
COPY / /
RUN ./usr/sbin/asterisk
RUN chown -R asterisk:asterisk /var/run/asterisk &&
chown -R asterisk:asterisk /var/lib/asterisk &&
chown -R asterisk:asterisk /var/log/asterisk &&
chown -R asterisk:asterisk /var/spool/asterisk &&
chown -R asterisk:asterisk /usr/lib/asterisk
RUN chown -R mysql:mysql /var/lib/mysql/*
RUN mkdir /var/run/mysqld &&
touch /var/run/mysqld/mysqld.sock &&
touch /var/run/mysqld/mysqld.pid &&
chown mysql:mysql /var/run/mysqld/ &&
chmod -R 755 /var/run/mysqld/ &&
chown -R mysql:mysql /var/run/mysqld/mysqld.sock &&
chown -R mysql:mysql /var/run/mysqld/mysqld.pid &&
chmod -R 644 /var/run/mysqld/mysqld.sock &&
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
RUN sed -i 's/(^upload_max_filesize = )./\120M/' /etc/php/7.0/apache2/php.ini
&& cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
&& sed -i 's/^(User|Group)./\1 asterisk/' /etc/apache2/apache2.conf
&& sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
RUN a2enmod rewrite
RUN service apache2 restart
RUN chmod +x /run/*
CMD /run/startup.sh
EXPOSE 80 3306 5060 5061 5160 5161 4569 10000-20000/udp code here
dockerginore:
# Remove folders mentioned here:
# https://wiki.archlinux.org/index.php/Rsync#As_a_backup_utility
/dev
/proc
/sys
/tftpboot
/tmp
/run
/mnt
/media
/lost+found
Allow files and directories
!/run/startup.sh
Remove useless heavy files like /var/lib/scrapyd/reports.old
/*.old
/.log
/.bak
Remove docker
/var/lib/lxcfs
/var/lib/docker
/etc/docker
/root/.docker
/etc/init/docker.conf
Remove the current program
/.dockerignore
/Dockerfile
And startup.sh:
#!/bin/bash -x
#https://docs.docker.com/engine/admin/multi-service_container/
/etc/init.d/mysql start
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start mysql: $status"
exit $status
fi
fwconsole start
if [ $status -ne 0 ]; then
echo "Failed to start fwconsole: $status"
exit $status
fi
#restore backup if exists
if [ -f /backup/new.tgz ]; then
echo "Restoring backup from /backup/new.tgz"
php /var/www/html/admin/modules/backup/bin/restore.php --items=all --restore=/backup/new.tgz
echo "Done"
fi
#restart freepbx to load everything fine after restoring backup
fwconsole stop
if [ $status -ne 0 ]; then
echo "Failed to stop fwconsole: $status"
exit $status
fi
fwconsole start
if [ $status -ne 0 ]; then
echo "Failed to start fwconsole: $status"
exit $status
fi
/etc/init.d/apache2 start
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start apache2: $status"
exit $status
fi
/run/backup.sh &
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start backup.sh: $status"
exit $status
fi
/run/delete-old-recordings.sh &
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start delete-old-recordings: $status"
exit $status
fi
while /bin/true; do
ps aux |grep mysqld |grep -q -v grep
MYSQL_STATUS=$?
ps aux |grep asterisk |grep -q -v grep
ASTERISK_STATUS=$?
ps aux |grep '/run/backup.sh' |grep -q -v grep
BACKUPSCRIPT_STATUS=$?
echo "Checking running processes..."
if [ $MYSQL_STATUS -ne 0 -o $ASTERISK_STATUS -ne 0 -o $BACKUPSCRIPT_STATUS -ne 0 ]; then
echo "One of the processes has already exited."
exit -1
fi
echo "OK"
sleep 60
done
During the container deployment(docker run --name=pbx --net=macvlan_network --ip=192.168.00.55 -it --privileged --restart unless-stopped pbx) it shows:
+ /etc/init.d/mysql start
[ ok ] Starting MariaDB database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
+ status=0
+ '[' 0 -ne 0 ']'
+ fwconsole chown
Taking too long? Customize the chown command, See http://wiki.freepbx.org/display/FOP/FreePBX+Chown+Conf
Setting Permissions...
Setting base permissions...Done
Setting specific permissions...
8486 [============================]
Finished setting permissions
+ fwconsole start
Running FreePBX startup...
Taking too long? Customize the chown command, See http://wiki.freepbx.org/display/FOP/FreePBX+Chown+Conf
Setting Permissions...
Setting base permissions...Done
Setting specific permissions...
8486 [============================]
Finished setting permissions
Starting Asterisk...
[============================] 3 secs
Asterisk Started
Running Asterisk post from Core module
Starting Core FastAGI Server...
[>---------------------------] 3 secs
Started Core FastAGI Server. PID is 886
+ '[' 0 -ne 0 ']'
+ '[' -f /backup/new.tgz ']'
+ fwconsole stop
Running FreePBX shutdown...
Running Asterisk pre from Core module
Stopping Core FastAGI Server
Stopped FastAGI Server
Shutting down Asterisk Gracefully. Will forcefully kill after 30 seconds.
Press C to Cancel
Press N to shut down NOW
[============================] < 1 sec
- '[' 0 -ne 0 ']'
- fwconsole start
Running FreePBX startup...
Taking too long? Customize the chown command, See http://wiki.freepbx.org/display/FOP/FreePBX+Chown+Conf
Setting Permissions...
Setting base permissions...Done
Setting specific permissions...
8501 [============================]
Finished setting permissions
Starting Asterisk...
[============================] 2 secs
Asterisk Started
Running Asterisk post from Core module
Starting Core FastAGI Server...
[>---------------------------] 2 secs
Started Core FastAGI Server. PID is 1276
- '[' 0 -ne 0 ']'
- /etc/init.d/apache2 start
[....] Starting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.00.55. Set the 'ServerName' directive globally to suppress this message
. ok
- status=0
- '[' 0 -ne 0 ']'
- status=0
- /run/backup.sh
- '[' 0 -ne 0 ']'
/run/startup.sh: line 47: /run/backup.sh: No such file or directory
- status=0
- '[' 0 -ne 0 ']'
- /bin/true
- /run/delete-old-recordings.sh
/run/startup.sh: line 54: /run/delete-old-recordings.sh: No such file or directory
- ps aux
- grep mysqld
- grep -q -v grep
- MYSQL_STATUS=0
- ps aux
- grep asterisk
- grep -q -v grep
- ASTERISK_STATUS=0
- ps aux
- grep /run/backup.sh
- grep -q -v grep
- BACKUPSCRIPT_STATUS=1
- echo 'Checking running processes...'
Checking running processes...
- '[' 0 -ne 0 -o 0 -ne 0 -o 1 -ne 0 ']'
- echo 'One of the processes has already exited.'
One of the processes has already exited.
- exit -1
After bash into the container:
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 1940 372 pts/0 Ss+ 20:48 0:00 /bin/sh -c /run/startup.sh
root 7 0.0 0.0 3196 2128 pts/0 S+ 20:48 0:00 /bin/bash -x /run/startup.sh
root 35 0.0 0.0 1940 1196 pts/0 S+ 20:48 0:00 /bin/sh /usr/bin/mysqld_safe
root 127 0.0 0.0 3328 2608 pts/1 Ss 20:48 0:00 /bin/bash
mysql 163 1.3 1.8 724776 71276 pts/0 Sl+ 20:48 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/arm-linux
root 164 0.0 0.0 4188 816 pts/0 S+ 20:48 0:00 logger -t mysqld -p daemon error
root 369 6.5 0.7 81056 30724 pts/0 S+ 20:48 0:01 php /usr/sbin/fwconsole start
root 471 0.0 0.0 1940 84 pts/0 S+ 20:48 0:00 /bin/sh /usr/sbin/safe_asterisk -U asterisk -G asterisk
asterisk 473 11.0 1.3 205468 51880 pts/0 Sl+ 20:48 0:01 /usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c
asterisk 581 20.2 1.0 156188 40372 ? Ssl 20:48 0:02 PM2 v2.10.7: God Daemon (/home/asterisk/.pm2)
asterisk 636 103 0.5 107888 21780 ? Rsl 20:48 0:01 node /var/www/html/admin/modules/pm2/node/node_modules/pm2/lib/ProcessContainerFork.js
root 646 0.0 0.0 1940 364 pts/0 S+ 20:48 0:00 sh -c runuser 'asterisk' -s '/bin/bash' -c 'cd /var/www/html/admin/modules/pm2/node && m
root 647 1.0 0.0 4832 2156 pts/0 S+ 20:48 0:00 runuser asterisk -s /bin/bash -c cd /var/www/html/admin/modules/pm2/node && mkdir -p /ho
asterisk 648 91.0 0.5 105448 20100 ? Rsl 20:48 0:00 node /var/www/html/admin/modules/pm2/node/node_modules/pm2/bin/pm2 jlist
root 656 0.0 0.0 5176 2120 pts/1 R+ 20:48 0:00 ps aux
But, I still can't access the web console. Please, can anyone help me make this workeble?