0

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?

  • I think that there are simpler methods, see [example](https://dev.to/sofianehamlaoui/convert-iso-images-to-docker-images-18jh). – harrymc Sep 22 '21 at 19:56
  • That's the first process I used to extract the image used in my build. Besides that author describes only iso files, where as mine is an img. They unsquashed the squashed file system, where in img you can just extract rootfs. But, then they tarball the image, but in reality docker don't tarball sock files. And I couldn't figure out how to startup the services in the container. – Safiq Rahman Sep 22 '21 at 22:04
  • Update: Adding a startup script did the trick. But, still how do I execute a startup script ? – Safiq Rahman Sep 23 '21 at 14:30

0 Answers0