docker.recipes

Snapdrop Local File Sharing

beginner

Local file sharing inspired by Apple Airdrop.

Overview

Snapdrop is a progressive web application that recreates Apple's AirDrop functionality for any device with a web browser. Originally created by Robin Linus as an open-source alternative to proprietary file sharing solutions, Snapdrop enables instant peer-to-peer file transfers between devices on the same local network without requiring accounts, installations, or cloud storage. The application uses WebRTC technology to establish direct connections between browsers, ensuring files never leave your local network. This Docker deployment uses the LinuxServer.io maintained image of Snapdrop, providing a self-hosted instance that runs entirely within your infrastructure. The containerized setup eliminates external dependencies on public Snapdrop servers, giving you complete control over your file sharing environment while maintaining the simplicity of the original web-based interface. The application automatically discovers devices on the same network and presents them as clickable targets for file transfers. This configuration is ideal for privacy-conscious organizations, home labs, and development teams who need secure local file sharing without internet connectivity requirements. IT administrators can deploy this for office environments where external file sharing services are restricted, while developers can use it for quick asset transfers between testing devices on isolated networks.

Key Features

  • WebRTC-based peer-to-peer file transfers that bypass server storage entirely
  • Automatic device discovery using network broadcast and WebSocket signaling
  • Progressive Web App support with offline capability and mobile home screen installation
  • Real-time connection status indicators showing available devices and transfer progress
  • Multi-file and folder transfer support with drag-and-drop interface
  • Cross-platform compatibility supporting Windows, macOS, Linux, iOS, and Android browsers
  • Zero-configuration setup requiring only network connectivity between devices
  • End-to-end encrypted transfers using WebRTC's built-in DTLS encryption

Common Use Cases

  • 1Corporate environments replacing external file sharing services for security compliance
  • 2Home media servers enabling quick photo and video transfers from mobile devices
  • 3Development teams sharing build artifacts and assets across different testing devices
  • 4Educational institutions providing student file sharing without cloud service dependencies
  • 5Trade shows and conferences where vendors need to share materials with attendees on local networks
  • 6Remote work setups allowing secure file transfers between personal and work devices on the same VPN
  • 7IoT and embedded development projects requiring file transfers to devices with limited connectivity options

Prerequisites

  • Docker and Docker Compose installed on the host system
  • Minimum 512MB available RAM for the Snapdrop container
  • Network ports 80 and 443 available and not conflicting with other services
  • All client devices must be on the same local network or VLAN as the Docker host
  • Modern web browsers supporting WebRTC (Chrome 23+, Firefox 22+, Safari 11+, Edge 79+)
  • Firewall rules allowing WebRTC traffic between client devices on UDP ports 1024-65535

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 snapdrop:
3 image: linuxserver/snapdrop:latest
4 container_name: snapdrop
5 environment:
6 - PUID=1000
7 - PGID=1000
8 - TZ=UTC
9 ports:
10 - "80:80"
11 - "443:443"
12 networks:
13 - snapdrop-network
14 restart: unless-stopped
15
16networks:
17 snapdrop-network:
18 driver: bridge

.env Template

.env
1# Snapdrop
2# No configuration needed

Usage Notes

  1. 1Web UI at http://localhost
  2. 2Open on multiple devices on same network
  3. 3Click device name to share files
  4. 4WebRTC peer-to-peer transfer
  5. 5No upload to server

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 snapdrop:
5 image: linuxserver/snapdrop:latest
6 container_name: snapdrop
7 environment:
8 - PUID=1000
9 - PGID=1000
10 - TZ=UTC
11 ports:
12 - "80:80"
13 - "443:443"
14 networks:
15 - snapdrop-network
16 restart: unless-stopped
17
18networks:
19 snapdrop-network:
20 driver: bridge
21EOF
22
23# 2. Create the .env file
24cat > .env << 'EOF'
25# Snapdrop
26# No configuration needed
27EOF
28
29# 3. Start the services
30docker compose up -d
31
32# 4. View logs
33docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/snapdrop-file-sharing/run | bash

Troubleshooting

  • Devices not appearing in discovery list: Ensure all devices are on the same subnet and check if corporate firewalls are blocking WebSocket connections on ports 80/443
  • File transfers failing or timing out: Verify WebRTC UDP traffic is not blocked between client devices, particularly in corporate networks with strict firewall policies
  • HTTPS certificate warnings in browsers: The default setup uses self-signed certificates; either accept the warning or configure proper SSL certificates in the container
  • Connection refused errors when accessing web interface: Check if ports 80 or 443 are already in use by other services using 'netstat -tulpn | grep :80'
  • Transfers work on some devices but not others: Disable VPN connections on client devices as they can interfere with local network discovery and WebRTC connectivity
  • Poor transfer performance on large files: Ensure QoS settings on network equipment aren't limiting peer-to-peer traffic between wireless and wired segments

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space