Dieser Beitrag beschreibt die Einrichtung von Guacamole in der bestehenden Docker Compose Umgebung mit lauffähigem Traefik 3.0, die nach Anleitung von goneuland (Traefik V3 Installation, Konfiguration und CrowdSec-Security) erstellt wurde.
Anlage Containerverzeichnis und Wechsel in selbes:
mkdir /opt/containers/guacamole cd /opt/containers/guacamole
Anlage docker-compose.yml Datei
version: '3.9'
services:
guacd:
image: guacamole/guacd:latest
container_name: guacd
hostname: guacd
restart: unless-stopped
volumes:
- ./guacd/drive:/drive:rw
- ./guacd/record:/record:rw
networks:
- guacamole_net
guacamole:
image: guacamole/guacamole:latest
container_name: guacamole
hostname: guacamole
restart: unless-stopped
depends_on:
- guacd
- guacamole-db
environment:
GUACD_HOSTNAME: guacd # Hostname des guacd-Containers
MYSQL_ENABLED: "true"
MYSQL_HOSTNAME: guacamole-db # Hostname des Datenbank-Containers
MYSQL_DATABASE: guacamole_db # DB Name
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_2025
MYSQL_DRIVER: mysql
links:
- guacd
labels:
- "traefik.enable=true"
- "traefik.http.routers.guacamole.rule=Host(`www.olpajoma.de`) && PathPrefix(`/guacamole`)"
- "traefik.http.routers.guacamole.entrypoints=websecure"
- "traefik.http.routers.guacamole.middlewares=default@file"
#- "traefik.http.routers.guacamole.middlewares=guac-auth,guacprefix"
#- "traefik.http.middlewares.guac-auth.basicauth.users=USERNAME:PASSWORD"
- "traefik.http.routers.guacamole.tls=true"
- "traefik.http.routers.guacamole.tls.certresolver=http_resolver"
- "traefik.http.routers.guacamole.service=guacamole"
- "traefik.http.services.guacamole.loadbalancer.server.port=8080"
- "traefik.docker.network=proxy"
networks:
- guacamole_net # Guacamole internes Netzwerk
- proxy # Hausnetz Traefik
guacamole-db:
image: mariadb:10.9.5
container_name: guacamole-db
hostname: guacamole-db
restart: unless-stopped
environment:
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_2025
MYSQL_ROOT_PASSWORD: 'Vault2022'
networks:
- guacamole_net
volumes:
./database:/var/lib/mysql # DB Dateien persistierend
networks:
proxy:
external: true
guacamole_net:
external: false
#name: guacamole_net
Datenbank initialisieren
Datenbank und Guacamolecontainer starten
docker compose up -d guacamole database
DB-Initialisierungsdatei erstellen
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
Kopieren des erstellten Skripts in den DB-Container und ausführen
docker cp initdb.sql guacamole-db:/initdb.sql docker exec -it guacamolde-db bash cat /initdb.sql | mysql -u root -p guacamole_db
Alternativ kann die Initialisierung auch automatisch erfolgen. Dazu muss das init-File im Container als Volume zur Verfügung gestellt werden. Das Verzeichnis benötigt chmod +x
Der Abschnitt „database“ wird dazu um das Volume erweitert:
database:
image: mariadb:10.9.5
container_name: guacamole-db
restart: unless-stopped
environment:
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_2025
MYSQL_ROOT_PASSWORD: 'Vault2022'
networks:
- guacamole_net
volumes:
- datenbank:/var/lib/mysql # Datenbank-Daten persistieren
- /opt/containers/guacamole/init:/docker-entrypoint-initdb.d
Nach Datenbankinitialisierung alle Container starten
docker compose up -d
Kontrolle der Logfiles
docker logs guacamole-db docker logs guacamole docker logs guacd
Anmelden als Standardbenutzer (guacadmin/guacadmin)
Ändern des Benutzers, Anlage von Benutzern und Verbindungen