Apache Guacamole Installation using docker compose

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

  1. MariaDB persistent storage is handled automatically via:
volumes:
  - mariadb_data:/var/lib/mysql
  1. Schema auto creation happens because the SQL file is placed into:
/docker-entrypoint-initdb.d/

This runs only on first initialization.

  1. 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

Updated on