Asterisk in Docker

From Wildsong
Jump to navigationJump to search

Read the Docker page if you don't know what Docker is.

Notes on building a current executable, the old way: Building Asterisk

Building a docker container

I started with the github respoke/asterisk image as my starting point. Then I did my own version because I wanted to use the latest Asterisk and respoke does not appear to get updated.

Then I broke respoke's image out into two parts, so that it would build faster.

I have a container on hub.docker.com called wildsong/build-asterisk that has all the tools in it, when the container builds it downloads sources and configures and compiles them. I keep the source here on Bellman.

cd source/docker/docker-build-asterisk

Once the 'build-asterisk' container is working, check in changes to github and a new copy will build at hub.docker.com automatically.

Remember to tag which goes something like this

git tag -a rel1.0.x -m 'release 1.0.x of build-asterisk'
git push origin rel1.0.x

Configuration

I keep the git repo for this part in Bellman because the current version is full of secrets.

git clone [email protected]:docker-asterisk-wildsong.git

Edit environment settings in Dockerfile and add j2 config files that I created for Vastra.

This configuration is entirely file based because my home phone system is relatively static so messing with MySQL just seems like extra work for no return.

The docker-asterisk container configures Asterisk based on templates in etc_asterisk.

cd source/docker/docker-asterisk-wildsong
edit Dockerfile to adjust environment
cd etc_asterisk
edit files
cd ..
docker rm -f asterisk-wildsong
docker build -t asterisk-wildsong .

Start it up

docker run -d --net=host --expose=10000-10101 --name=asterisk asterisk-wildsong

Make it reboot

docker update --restart unless-stopped asterisk

Debugging

Start the console then use commands

docker exec -it asterisk asterisk -r

bellman*CLI> core set debug 10
bellman*CLI> core set verbose 10
bellman*CLI> pjsip

Launch server

Using the --net=host option is not a best practice because it exposes every port running on the docker machine. It means it looks like Asterisk is just running on Bellman, not inside a container.

docker run -d --net=host --name=asterisk asterisk

I don't think I need any -p port mappings or --expose if I use --net=host, and though it's not "best practices" it will make Asterisk networking problems go away pretty much.

Testing

Outside call

Call from PSTN to 707-827-0001

  • Is it being logged at Twilio? YES
  • Can I see the connection attempt in the Asterisk console? No
    • Can I see the connection attempt being forwarded through the firewall? Don't know yet
  • Two way audio?
  • TODO Set up SMS and MMS message gateways???

Inside call, to PBX

  • Press voicemail button. Does prompt come back? YES
    • TODO -- I want it configured to bypass the user/pass prompt.

Inside call, station to station

I have two stations registering right now, the GXV phones.

  • 100 Ring all phones
  • 101 Studio phone 192.168.123.80 on wire
  • 102 eLab phone 192.168.123.76 on WIFI
  • 850 voice mail
  • Call to voice mail works.
  • Calling station to station works.
  • TODO -- GET SMART PHONE set up. Currently it fails to register
[Nov  6 06:56:21] NOTICE[262]: res_pjsip/pjsip_distributor.c:659 log_failed_request: Request 'REGISTER' from '<sip:[email protected]>' failed for '192.168.123.207:13411' (callid: [email protected]) - Failed to authenticate
[Nov  6 06:56:21] NOTICE[262]: res_pjsip/pjsip_distributor.c:659 log_failed_request: Request 'REGISTER' from '<sip:[email protected]>' failed for '192.168.123.207:13411' (callid: [email protected]) - No matching endpoint found

Voicemail

Logins fail with this error.

[Nov  6 06:54:09] WARNING[294][C-00000008]: app_voicemail.c:11191 vm_authenticate: Couldn't read username

Intercom calling

TODO

Console

You can connect to the Asterisk console directly with this command

docker exec -it asterisk asterisk -r

Or you can connect the usual way via a bash shell

docker exec -it asterisk bash
tcpdump -n not port 22 and not arp and not host 192.168.123.159

Connected phones

I don't know how to see what phones are registered with pjsip!??

I started a separate page for it, PJSIP.