guacamole
Guacamole Overview
Secure your stack with a hardened Guacamole image freshly-built by Minimus. Minimus images always include the most up-to-date package version for all packages and dependencies contained in the image.
Guacamole gives support and IT teams browser-based access to remote desktops and servers over RDP, VNC, and SSH, so users can reach a Windows or Linux machine from any web browser without installing client software, a VPN, or opening extra network ports. This makes it useful for centralizing remote access to internal systems, granting contractors or support staff temporary access without distributing native remote-desktop clients, and routing connections through a single, auditable web gateway.
Try It Out
Guacamole needs two companion pieces to run: Guacamole-Server, which provides guacd, the daemon that proxies RDP, VNC, and SSH connections, and a database that stores users and connections through Guacamole's JDBC auth extension. The steps below start Guacamole-Server, a Postgres database, and the Guacamole web application, all using Minimus images.
Step 1 - Create a Docker Network
Create a shared network so the containers can reach each other by name:
docker network create guacamole-netStep 2 - Start Guacamole-Server
Run the Minimus Guacamole-Server image on the shared network:
docker run --rm -d --name guacamole-server \
--network guacamole-net \
reg.mini.dev/guacamole-serverStep 3 - Start a Postgres Database
Start a database using the Minimus Postgres image. The following command sets the password to Minimus!, but you can set any password you want:
docker run --rm -d --name postgres \
--network guacamole-net \
-e POSTGRES_DB=guacamole_db \
-e POSTGRES_USER=guacamole_user \
-e POSTGRES_PASSWORD=Minimus! \
reg.mini.dev/postgresStep 4 - Initialize the Database Schema
Generate Guacamole's schema with the Minimus image itself, then load it into Postgres:
docker run --rm reg.mini.dev/guacamole /opt/guacamole/bin/initdb.sh --postgresql | \
docker exec -i postgres psql -U guacamole_user -d guacamole_db -f -If you see a connection error, give Postgres a few seconds to finish starting up and run the command again.
Step 5 - Start Guacamole
Run Guacamole on the same network, pointing it at Guacamole-Server and the Postgres database:
docker run --rm -d --name guacamole \
--network guacamole-net \
-p 8080:8080 \
-e GUACD_HOSTNAME=guacamole-server \
-e POSTGRES_HOSTNAME=postgres \
-e POSTGRES_DATABASE=guacamole_db \
-e POSTGRES_USER=guacamole_user \
-e POSTGRES_PASSWORD=Minimus! \
reg.mini.dev/guacamoleVisit http://localhost:8080/guacamole/ to access the Guacamole UI and log in with the default administrator account:
- Username:
guacadmin - Password:
guacadmin
This account is a well-known default, so change its password immediately after logging in.
Step 6 - Add a Sample Connection
The dashboard starts out empty, so we'll use Guacamole's REST API to add a sample connection.
First, authenticate as guacadmin to get a token:
TOKEN=$(curl -s -d "username=guacadmin&password=guacadmin" \
http://localhost:8080/guacamole/api/tokens | sed -n 's/.*"authToken":"\([^"]*\)".*/\1/p')Then create a connection with that token:
curl -s -X POST "http://localhost:8080/guacamole/api/session/data/postgresql/connections?token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "demo-vnc",
"protocol": "vnc",
"parameters": {"hostname": "guacamole-server", "port": "5900"},
"attributes": {}
}'Refresh the dashboard and demo-vnc will appear under "All Connections." (Nothing is actually listening on that host and port, so opening the connection won't succeed).
Step 7 - Clean Up
Stop and remove the containers and network:
docker rm -f guacamole postgres guacamole-server
docker network rm guacamole-netTechnical Considerations
The Guacamole image provided by Minimus is a slim, security-hardened alternative to the public image from Docker Hub. The images are largely interchangeable, with a few differences as noted below.
Guacamole built by Minimus:
- Runs as a non-root user by default, matching the public image's non-root default of user
guacamole(UID 1001). - Drill down on the version specification tab to see the default user, listening ports, entrypoint, volumes, environment variables, etc.
The Payoff
A hardened, minimal image that will remain more secure for the long run and accrue vulnerabilities at a slower rate.
- See the risk reduction dashboard for a detailed CVE comparison over the past 30 days.
- Review the compliance report to see the default hardening and security configurations for the image.
Terms & Info
Trademark
This catalog is published by Minimus. All product names, logos, and marks, other than those belonging to Minimus, shown are owned by their respective rights holders and appear here only to identify the open source software each image contains. Minimus claims no ownership of those marks and implies no affiliation with, endorsement by, certification by, or sponsorship by any rights holder.
Disclaimer
Images are provided "as-is" without warranty of any kind. "Hardened" refers to the security configuration applied at the time of build and does not constitute a guarantee of ongoing security or absence of vulnerabilities. The free tier is provided without support, SLA, or guaranteed patching timelines. Security updates may be applied to paid subscriptions before or instead of free tier images. By pulling or using any image you agree to our Terms of Use.