File Browser simple web file manager with sharing links, using Docker Compose.
Last updated: Oct 2026
File Browser gives you a clean web interface for one folder on your server: upload, download, rename, move, preview and edit files, and create share links. Users and permissions are kept in a small database.
Why you'd want it: Easy file access from phones and guests without setting up SMB or SFTP.
| Item | Value |
|---|---|
| Stack folder | /opt/stacks/filebrowser |
| Category | Documents |
| Main image | filebrowser/filebrowser:s6 |
| Services | 1 |
| Web UI | http://<SERVER_IP>:30004 |
| Official docs | https://filebrowser.org/ |
.env/.secret files from Docker Folders and Environment/srv/shareFolder layout:
/opt/stacks/
├── _shared/
│ ├── .env # shared, non-secret settings
│ └── .secret # passwords, tokens and keys (chmod 600, never commit)
└── filebrowser/
└── compose.yaml
/opt/appdata/filebrowser/ # persistent application data
/opt/stacks/filebrowser/compose.yaml:
---
services:
filebrowser:
image: filebrowser/filebrowser:s6
container_name: filebrowser
hostname: filebrowser
env_file:
- /opt/stacks/_shared/.env
- /opt/stacks/_shared/.secret
environment:
- FB_NOAUTH=false # true turns off the login page; only on a trusted LAN
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE:-10} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE:-200k} # Max file size
volumes:
- /srv/share:/srv # the folder you want to browse
- /opt/appdata/filebrowser/config:/config # Persistent configuration directory
- /opt/appdata/filebrowser/database:/database # Persistent database directory
ports:
- 30004:80 # web UI on host port 30004
restart: unless-stopped
Compose reads these from the shared files with --env-file. Replace every <PLACEHOLDER> with your own value.
/opt/stacks/_shared/.env:
PUID=1000
PGID=1000
TZ=<TZ>
DOCKERLOGGING_MAXFILE=10
DOCKERLOGGING_MAXSIZE=200k
| Variable | File | Purpose | Example |
|---|---|---|---|
PUID |
.env |
User ID the container runs as (see Docker Folders) | 1000 |
PGID |
.env |
Group ID the container runs as | 1000 |
TZ |
.env |
Time zone in tz database format, e.g. America/New_York | <TZ> |
DOCKERLOGGING_MAXFILE |
.env |
Number of rotated container log files to keep | 10 |
DOCKERLOGGING_MAXSIZE |
.env |
Maximum size of each container log file | 200k |
| Host port | Container port | Protocol | Service | Purpose |
|---|---|---|---|---|
| 30004 | 80 | tcp | filebrowser |
web UI on host port 30004 |
| Host path | Container path | Service | Purpose |
|---|---|---|---|
/srv/share |
/srv |
filebrowser |
the folder you want to browse |
/opt/appdata/filebrowser/config |
/config |
filebrowser |
Persistent configuration directory |
/opt/appdata/filebrowser/database |
/database |
filebrowser |
Persistent database directory |
No limits are set. This app is light, so add deploy.resources.limits only if you need to cap it.
sudo mkdir -p /opt/stacks/filebrowser /opt/appdata/filebrowser
sudo chown -R $USER: /opt/stacks/filebrowser
/opt/stacks/_shared/.env and /opt/stacks/_shared/.secret (chmod 600 .secret)./opt/stacks/filebrowser/compose.yaml.cd /opt/stacks/filebrowser
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret config --quiet
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret up -d
docker compose logs -f.docker logs filebrowser (older images use admin / admin).http://<SERVER_IP>:30004, sign in and change the password under Settings > Profile.Tip: create a small wrapper such as
alias dc='docker compose --env-file /opt/stacks/_shared/.env --env-file /opt/stacks/_shared/.secret'so every stack uses the same env files.
cd /opt/stacks/filebrowser
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret pull
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret up -d
docker image prune -f
Back up /opt/appdata/filebrowser before major upgrades. Watchtower can automate updates for stateless apps.
docker compose ps and docker compose logs --tail=100.FB_NOAUTH=true disables authentication. Keep it false unless the app is on a trusted LAN only.PUID:PGID./database and /config on persistent storage.:?err): run the config command above to see which variable is not set in your env files.Educational example. Review every path, port and credential before you deploy, and never publish your .secret file.