Copyparty is a lightweight Python-based file server that can run on almost any platform. Running it in a Docker container provides isolation, easy management, and portability. This guide covers Docker CLI, Docker Compose, and Portainer deployment options.
1. Prepare Configuration and Folders
Before running Copyparty, create the necessary directories and configuration files on your host.
Steps:
- Create a folder for configuration:
mkdir -p ~/copyparty-config
- Create or move your configuration file (
config.conf
) into that folder:
nano ~/copyparty-config/config.conf
Paste your Copyparty config:
[global]
p: 8086, 3939
e2dsa
e2ts
z, qr
shr: /shr
hist: /cfg/hists/
[accounts]
exampleadmin: replacethispassword@124!
viewer: welcome
privateperson: coolpassword
[/]
.
accs:
r: viewer
rwmda: exampleadmin
[/priv]
./priv
accs:
rw: privateperson
rwmda: exampleadmin
[/pubic]
./pubic
accs:
r: *
rwmda: exampleadmin
- Create folder for session/history files:
mkdir -p ~/copyparty-config/hists
- Ensure proper permissions (Copyparty container runs as
user 1000
):
sudo chown -R 1000:1000 ~/copyparty-config
- Create a folder for media files (optional):
mkdir -p /mnt/media
2. Deploy Copyparty
You can deploy using Docker CLI, Docker Compose, or Portainer. All options use the same configuration and volume structure.
Option 1: Docker CLI
docker run -d \
--name copyparty \
-p 3939:3939 \
-p 8086:8086 \
-v ~/copyparty-config/config.conf:/cfg/config.conf:ro \
-v ~/copyparty-config/hists:/cfg/hists \
-v /mnt/media:/media \
--user 1000 \
--restart unless-stopped \
copyparty/ac:latest
Notes:
-d
→ run container in background-p
→ map host ports to container ports-v
→ mount volumes (config read-only, history writable)--user 1000
→ match container user permissions--restart unless-stopped
→ auto-restart container
Option 2: Docker Compose
Create a docker-compose.yml
:
version: "3.8"
services:
copyparty:
image: copyparty/ac:latest
container_name: copyparty
ports:
- "3939:3939"
- "8086:8086"
volumes:
- ~/copyparty-config/config.conf:/cfg/config.conf:ro
- ~/copyparty-config/hists:/cfg/hists
- /mnt/media:/media
restart: unless-stopped
user: "1000"
Start the container:
docker-compose up -d
Option 3: Portainer Stack
- Log in to Portainer → go to Stacks → Add stack.
- Paste the following YAML:
version: "3.8"
services:
copyparty:
image: copyparty/ac:latest
container_name: copyparty
ports:
- "3939:3939"
- "8086:8086"
volumes:
- /root/copyparty-config/config.conf:/cfg/config.conf:ro
- /root/copyparty-config/hists:/cfg/hists
- /mnt/media:/media
restart: unless-stopped
user: "1000"
- Deploy the stack.
All three options produce the same result. Choose the method you’re most comfortable with.
3. Verify Deployment
- Check container logs (Portainer or CLI):
docker logs -f copyparty
You should see:
LOG: listening @ http://0.0.0.0:3939/
LOG: listening @ http://0.0.0.0:8086/
- Access Copyparty in a browser:
http://<server-ip>:3939/
http://<server-ip>:8086/
- Test user permissions according to your
config.conf
.
4. Tips & Notes
- Editing config: Update
~/copyparty-config/config.conf
on the host and restart container:
docker restart copyparty
- Media folder: Mount your media directory as
/media
inside the container. - Permissions: Ensure folders are writable by
user 1000
. - Ports: Ensure
config.conf
ports match Docker/Portainer ports.
This article
I Basically just did all these steps and then let chatgpt summarize my journey.