WCS can be used in Docker with official Docker image since build 5.2.458

Docker deployment example

To deploy the simple WebRTC streaming server in Docker, do the followin steps:

1. Pull the latest WCS image from Docker Hub

sudo docker pull flashphoner/webcallserver

2. Set up docker bridge network

sudo docker network create \
 --subnet \
 --gateway= \
 --driver=bridge \
 --opt com.docker.network.bridge.name=br-testnet testnet

3. Start WCS docker container with your own trial or commercial license number

docker run \
-e PASSWORD=password \
-e LICENSE=license_number \
-e LOCAL_IP= \
--net testnet --ip \
--name wcs-docker-test --rm -d flashphoner/webcallserver:latest

4. Check if the container available by SSH

ssh root@

5. Open Two Way Streaming example in local browser, publish a stream

6. Close the page, stop the container

sudo docker stop wcs-docker-test

License will be deactivated on container stop to prevent unnecessary billing.

Docker container configuration

Networking issues

By default, IP address will be set dynamically to the container. So if you suppose to use fixed IP address, you should set it with docker run options and pass to the container using LOCAL_IP variable:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -e LOCAL_IP=static_ip \
 --net your-docker-network \
 --ip static_ip \
 --name webcallserver-instance -d webcallserver:latest

If your docker host is behind NAT, and your WCS is supposed to be available from outside, you should set external IP address to EXTERNAL_IP variable:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -e LOCAL_IP=static_ip \
 -e EXTERNAL_IP=external_ip \
 --net your-docker-network \
 --ip static_ip \
 --name webcallserver-instance -d webcallserver:latest

Dynamic IP address detection issues

When IP address should be set dynamically to the container, and the container has more than one network interface (this can happen for example when docker host interfaces are used), IP address to bind WCS server should be chosen manually while the container is launching. In this case, the container should be started in interacrive mode

docker run \
-e PASSWORD=password \
-e LICENSE=license_number \
--net host \
--name wcs-docker-test --rm -it flashphoner/webcallserver:latest

Container enrty point script detects all the IP addresses and asks to enter the address for WCS to bind to

The address chosen will be written to ip_local parameter, for example


Environment variables reference

The following environment variables can be passed to the container:

Volumes reference

The following docker volumes can be mounted to the container

The container launch example with all the volumes mounted:

docker run -e LICENSE=license_number -e CDN_ROLE=origin \
 -v /opt/wcs/conf:/conf \
 -v /opt/wcs/logs:/usr/local/FlashphonerWebCallServer/logs \
 -v /opt/wcs/hls:/usr/local/FlashphonerWebCallServer/hls \
 -v /opt/wcs/media:/usr/local/FlashphonerWebCallServer/media \
 -v /opt/wcs/records:/usr/local/FlashphonerWebCallServer/records \
 --name webcallserver-instance -d webcallserver:latest

Additional instance configuration

The following additional configuration files can be placed to the host folder mounted as /conf volume:

All those files can be used for example to restore Web Call Server instance configuration from backup and automatic deployment. The files will be copied to the container 'as is', except flashphoner.properties:

Do not mount whole folder /usr/local/FlashphonerWebCallServer/conf or separate files from this folder as volumes!

For example, this is not allowed:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -v /opt/wcs/conf:/usr/local/FlashphonerWebCallServer/conf \
 --name webcallserver-instance -d webcallserver:latest

and this too:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -v /opt/wcs/conf/flashphoner.properties:/usr/local/FlashphonerWebCallServer/conf/flashphoner.properties \
 --name webcallserver-instance -d webcallserver:latest

Container ports

The following ports are available by default:

The ports can be changed using docker run --expose parameters if necessary. In this case, the actual port values should be set to flashphoner.properties and wcs-core.properties files, see description above

Known issues

1. Open files limit cannot be changed from inside container

Symptoms: the following message is displaing when container starts in interactive mode

ulimit: open files: cannot modify limit: Operation not permitted

Solution: set open files limit in container parameters when launching it

docker run --ulimit nofile=100000:100000 \
 -e LICENSE=license_number -e PASSWORD=secret \
 --name webcallserver-instance --rm webcallserver:latest