I decided I needed to update my Apache Guacamole instance to their latest version – 1.5.5. Unfortunately the git repo I provided in my last article about it – https://techblog.jeppson.org/2021/03/guacamole-docker-quick-and-easy/ – doesn’t appear to work properly, even with a fresh install. So, I set about to rebuild from scratch. I found this article which helped me to do it. I updated the version from 1.4.0 to 1.5.5 and it worked beautifully.
Make guacamole directory
mkdir guacamole
cd guacamole
Pull down images
docker pull guacamole/guacamole:1.5.5
docker pull guacamole/guacd:1.5.5
docker pull mariadb:10.9.5
Grab database initialization file
docker run --rm guacamole/guacamole:1.5.5 /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
Make initial docker-compose.yml file with just the database for now:
services:
guacdb:
container_name: guacamoledb
image: mariadb:10.9.5
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'MariaDBRootPass'
MYSQL_DATABASE: 'guacamole_db'
MYSQL_USER: 'guacamole_user'
MYSQL_PASSWORD: 'MariaDBUserPass'
volumes:
- './db-data:/var/lib/mysql'
volumes:
db-data:
Copy sql script into container and execute it
docker cp initdb.sql guacamoledb:/initdb.sql
sudo docker exec -it guacamoledb bash
cat /initdb.sql | mysql -u root -p guacamole_db
<insert MYSQL_ROOT_PASSWORD as defined earlier>
exit
Add the guacd & guacamole sections to your docker-compose.yml file
This is the end result:
services:
guacdb:
container_name: guacamoledb
image: mariadb:10.9.5
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'MariaDBRootPass'
MYSQL_DATABASE: 'guacamole_db'
MYSQL_USER: 'guacamole_user'
MYSQL_PASSWORD: 'MariaDBUserPass'
volumes:
- './db-data:/var/lib/mysql'
guacd:
container_name: guacd
image: guacamole/guacd:1.4.0
restart: unless-stopped
guacamole:
container_name: guacamole
image: guacamole/guacamole:1.4.0
restart: unless-stopped
ports:
- 8080:8080
environment:
GUACD_HOSTNAME: "guacd"
MYSQL_HOSTNAME: "guacdb"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USER: "guacamole_user"
MYSQL_PASSWORD: "MariaDBUserPass"
TOTP_ENABLED: "true"
depends_on:
- guacdb
- guacd
volumes:
db-data:
Start docker compose stack
Finally run docker compose up -d to get everything up and running again.
Remove /guacamole in the URL
The article says guacamole must have /guacamole at the end of the URL, but that is not correct. There is an environment variable you can pass to the container to tell the context to run in root instead of the guacamole subdirectory. If this is your desire, simply add
WEBAPP_CONTEXT: "ROOT"
to the guacamole section in your docker compose file and re-run sudo docker compose up -d
Here is my final docker compose file for Guacamole 1.5.5:
services:
guacdb:
container_name: guacamoledb
image: mariadb:10.9.5
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'MariaDBRootPass'
MYSQL_DATABASE: 'guacamole_db'
MYSQL_USER: 'guacamole_user'
MYSQL_PASSWORD: 'MariaDBUserPass'
volumes:
- './db-data:/var/lib/mysql'
guacd:
container_name: guacd
image: guacamole/guacd:1.5.5
restart: unless-stopped
guacamole:
container_name: guacamole
image: guacamole/guacamole:1.5.5
restart: unless-stopped
ports:
- 8080:8080
environment:
GUACD_HOSTNAME: "guacd"
MYSQL_HOSTNAME: "guacdb"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USER: "guacamole_user"
MYSQL_PASSWORD: "MariaDBUserPass"
TOTP_ENABLED: "true"
WEBAPP_CONTEXT: "ROOT"
depends_on:
- guacdb
- guacd
volumes:
db-data: