CompleteFTP Docker Installation Guide
This guide provides step-by-step instructions for running CompleteFTP for Linux using Docker.
Docker provides an isolated, reproducible environment for CompleteFTP, making it perfect for development, testing, and containerized production deployments.
Quick Start
Running CompleteFTP in a Docker container requires building from the provided Dockerfile. Follow these steps to get started:
Building from Dockerfile
Step 1: Download the Dockerfile
Download the Dockerfile and docker-entrypoint.sh into the same directory.
Step 2: Build the Image
In the directory containing both files, run:
docker build -t completeftp .
Step 3: Run the Container
Development Mode (no persistence)
For quick testing and evaluation, run without bind mounts:
docker run -d \
--name completeftp \
-p 21:21 -p 22:22 -p 990:990 -p 80:80 -p 443:443 \
completeftp
Warning: All configuration and uploaded files will be lost if the container is removed.
Production Mode (persistent data)
For production use, bind-mount the data directory to preserve configuration, user accounts, and uploaded files across container replacements:
docker run -d \
--name completeftp \
-p 21:21 -p 22:22 -p 990:990 -p 80:80 -p 443:443 \
-v ./completeftp-data:/var/lib/completeftp \
-v ./completeftp-logs:/var/log/completeftp \
completeftp
On first run with an empty bind mount, the entrypoint automatically seeds the default configuration. Subsequent runs detect the existing configuration and start normally.
Important: Mount
/var/lib/completeftpin production to prevent data loss when replacing containers.Note for FTPS: FTPS requires additional ports for data channels. If you need FTPS support, you'll need to create an additional port range mapping in Docker and in CompleteFTP.
Step 4: Verify the Container
Check that the container is running:
docker ps
Check the logs:
docker logs completeftp
Step 5: Access CompleteFTP CLI
Execute commands inside the running container:
# List users
docker exec completeftp completeftp user list
# Add a user
docker exec completeftp completeftp user add testuser
# Get help
docker exec completeftp completeftp --help
For interactive access:
docker exec -it completeftp bash
Step 6: Activate Your Trial for Remote Access
By default, your CompleteFTP trial server will only accept connections from within the container (i.e. its own localhost). To enable access from the host machine and from other machines, you must active your 30-day trial license .
You can activate at any time — but until you do, external connections will be rejected.
Container Management
Start/Stop/Restart:
docker start completeftp
docker stop completeftp
docker restart completeftp
View logs:
docker logs completeftp -f
Remove container:
docker stop completeftp
docker rm completeftp
Port Configuration
The container exposes the following ports:
| Port | Protocol | Purpose |
|---|---|---|
| 21 | FTP | Standard FTP control |
| 22 | SSH/SFTP | Secure Shell and SFTP |
| 990 | FTPS | FTP over SSL/TLS |
| 80 | HTTP | Web interface |
| 443 | HTTPS | Secure web interface |
Custom port mapping:
docker run -p 2121:21 -p 2022:22 ... completeftp
Persistent Data
The container stores all mutable state under two directories:
/var/lib/completeftp— Main data directory containing server configuration (config/), user accounts and settings (users/), and shared file storage (share/). Mount this directory in production to preserve data across container replacements./var/log/completeftp— Server log files. Mounting this is optional but useful for log aggregation and debugging.
Do not mount application code directories such as /usr/share/completeftp/web — these are part of the image and should not be overridden.
Next Steps
Refer to the Quick Tour to configure your server.
Troubleshooting
| Issue | Solution |
|---|---|
| Container won't start | Check docker logs completeftp |
| Port conflicts | Use different port mappings with -p |
| Permission errors | Ensure Docker has proper permissions |
| Can't connect remotely | Activate your trial license |
| Empty bind mount not initialised | Check entrypoint logs: docker logs completeftp — you should see "First run detected" |