Step 1: Create Directory Structure
guacamole/
├── docker-compose.yml
├── init/
│ └── schema.sql
You will put the Guacamole SQL schema in init/schema.sql.
Step 2: Download SQL Schema for MariaDB
Guacamole provides SQL initialization scripts. Run this:
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > init/schema.sql
For MariaDB, the MySQL schema is correct.
Step 3: Docker Compose File
Create docker-compose.yml:
version: "3.9"
services:
mariadb:
image: mariadb:10.11
container_name: guac-mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacuser
MYSQL_PASSWORD: guacpass
volumes:
- mariadb_data:/var/lib/mysql
- ./init/schema.sql:/docker-entrypoint-initdb.d/schema.sql
networks:
- guacnet
guacd:
image: guacamole/guacd
container_name: guacd
restart: always
networks:
- guacnet
guacamole:
image: guacamole/guacamole
container_name: guacamole
restart: always
depends_on:
- mariadb
- guacd
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: mariadb
MYSQL_DATABASE: guacamole_db
MYSQL_USERNAME: guacuser
MYSQL_PASSWORD: guacpass
MYSQL_PORT: 3306
ports:
- "8080:8080"
networks:
- guacnet
volumes:
mariadb_data:
networks:
guacnet:
Step 4: Start the Stack
sudo docker-compose up -d
Step 5: Access Guacamole
Open:
http://localhost:8080/guacamole/
Default login:
-
User: guacadmin
-
Pass: guacadmin
(You should change password after login.)
Step 6: Verification Commands
Check logs:
docker logs guacamole
docker logs guacd
docker logs guac-mariadb
Check MariaDB data persists:
docker stop guac-mariadb
docker start guac-mariadb
Data will remain in mariadb_data volume.
Check containers:
docker ps
Notes
- MariaDB persistent storage is handled automatically via:
volumes:
- mariadb_data:/var/lib/mysql
- Schema auto creation happens because the SQL file is placed into:
/docker-entrypoint-initdb.d/
This runs only on first initialization.
- Networking uses a dedicated Docker network
guacnet.
Add Remote Connection
Go to settings > Connection > New Connection

Fill the form base on protocol


Save, and thats all