Skip to content

Install with Docker

github-actions[bot] edited this page Sep 25, 2026 · 2 revisions

Install with Docker

Vision Call publishes a ready-made image for both regular PCs and ARM boards such as the Raspberry Pi:

ghcr.io/anand34577/vision-call:latest

It works with Docker on Linux, Docker Desktop on Windows and macOS, and Podman.

One command

docker run -d --name visioncall --restart unless-stopped \
  -p 8443:8443 -p 8080:8080 -p 7882:7882/udp \
  -v visioncall-data:/data \
  ghcr.io/anand34577/vision-call:latest

On Windows PowerShell, put it on one line or replace each \ with a backtick (`).

Get the first admin password:

docker logs visioncall 2>&1 | grep -i password

Open https://<this-computer's-ip>:8443 from any device on your network and sign in as admin.

Docker Compose

Download the compose file and start it:

curl -fsSL https://raw.githubusercontent.com/anand34577/vision-call/main/docker-compose.yml -o docker-compose.yml
docker compose up -d
docker compose logs app | grep -i password

On Windows PowerShell, download it with:

irm https://raw.githubusercontent.com/anand34577/vision-call/main/docker-compose.yml -OutFile docker-compose.yml

To change a setting, create a file called .env next to docker-compose.yml with the lines you need (see Configuration or the full list in .env.example), then run docker compose up -d again.

To pin a version instead of following latest, add VISIONCALL_VERSION=v1.0.1 to .env.

What the ports do

Port Purpose
8443/tcp The web app over HTTPS. Browsers need HTTPS for camera and microphone.
8080/tcp The web app over plain HTTP. Used by the Android app and health checks.
7882/udp Audio and video for group calls.

You can change the port on the left of 8443:8443 or 8080:8080 freely, for example -p 9443:8443. The UDP port is different: both numbers must match, and the app must know it. To use 7000, set -e WEBRTC_UDP_PORT=7000 -p 7000:7000/udp.

Where the data lives

Everything (database, uploaded files, the certificate and the session key) is stored in the visioncall-data volume. Removing and recreating the container keeps it. To remove the data as well, run docker volume rm visioncall-data.

Prefer a folder you can see? Use -v ./visioncall-data:/data instead. The container runs as user ID 10001, so give it the folder first:

mkdir visioncall-data && sudo chown 10001:10001 visioncall-data

Optional: TURN relay

Most networks don't need this. Add it only if calls fail between devices on different subnets or across a VPN mesh (see Networking and Firewall).

  1. Add these lines to .env, using this computer's LAN IP and a long random secret:

    EXTERNAL_IP=192.168.1.50
    TURN_HOST=192.168.1.50:3478
    TURN_SECRET=put-a-long-random-string-here
    
  2. Start the relay alongside the app:

    docker compose --profile turn up -d

The relay uses host networking, which works on Linux. On Docker Desktop, run coturn directly on the host instead.

Upgrade

docker compose pull && docker compose up -d

Or with plain docker run:

docker pull ghcr.io/anand34577/vision-call:latest
docker rm -f visioncall
# then run the same "docker run" command again

Your data stays in the volume. See Backups and Upgrades for backups.

Build the image yourself

git clone https://github.com/anand34577/vision-call.git
cd vision-call
docker build -t visioncall .

Then use visioncall instead of ghcr.io/anand34577/vision-call:latest in the commands above.

Clone this wiki locally