Extremely light container (Alpine base, 26.3MB image size on arm64!) to run a Snapcast client instance.
I run this on two Le Potatoes that I converted from Armbian to Dietpi with Apple type-C to headphone jacks (👌 mini-DACs).
Runs on basically anything Linux that can run Docker and has USB ports.
This is a multi-arch image: supported architectures are
amd64arm64armv7
Warning
As of March 2026, I've moved from pushing images on Dockerhub to GHCR (easy automatic Snapcast updates via GH Actions).
If your Compose file still uses the default kertain/snapclient-docker image, please change that to ghcr.io/kerta1n/snapclient-docker:latest.
This was changed in commit 6356cb6, so you can ignore this warning if you are installing this for the first time.
This is a volume-less container, so just run wget https://raw.githubusercontent.com/kerta1n/snapclient-docker/main/compose.yml, configure variables, and run docker compose up -d
mac_address: If you are running multiples of this container (which I would do if you can attach multiple soundcards), make this something different for each so that Snapserver recognizes the client after restarting if there is an update to Snapcast.
hostname: Container's hostname. I would advise setting this to the room that this will be controlling so that it's easy to identify using docker ps Keep it the same as the container name to avoid confusion in the actual Snapcast webUI. This will only work if you have an unique MAC address configured as well.
Device /dev/snd: Just mounts your sound device so that it can see all of your soundcards. This shouldn't break anything mounting the same device across multiple container deployments if you want attach multiple DACs (audio outputs) to the same host.
command: in compose.yml:
-h : Set this to the host IP of your Snapserver. If your network supports mDNS, use the domain name, but be careful. Test by running ping snapserver.domain on any Linux/MacOS/Windows device. If all 4 pings work, use the domain name. If not, use the LAN IP instead.
-s: Run aplay -L on the host (don't use with aplay -l, snapclient identifies per -L) to find your soundcard. You can typically test this by plugging in each soundcard one at a time and looking at dmesg.
docker compose down --rmi alldocker compose up -d
F**k passing ENV into ENTRYPOINT. If you're able to fix this, please open a PR
Code is taken from/inspired by Saiyato/snapclient_docker.
HUGE THANK YOU to Bart Ribbers for maintaining the Alpine build of Snapcast. Bart Ribbers' GitHub