diff --git a/guacamole-docker/README.md b/guacamole-docker/README.md index 89ea1fa7c..34124b152 100644 --- a/guacamole-docker/README.md +++ b/guacamole-docker/README.md @@ -28,6 +28,29 @@ Once the Guacamole image is running, Guacamole will be accessible at `-p 8080:8080` option to expose this port at the level of the machine hosting Docker, as well. +Docker Secrets +============== +The string `_FILE` may be appended to some of the environment variables listed +below if you are using MySQL or PostgreSQL authentication. This will cause the +startup script to load the values for those variables from files within +the container. + +This is useful for specifying sensitive info, ie. passwords for +the database, in secured files instead of plaintext environment variables. This +is generally used for loading values from [Docker secrets](https://docs.docker.com/engine/swarm/secrets/#read-more-about-docker-secret-commands), which are stored at +`/run/secrets/` within the container. + +It is important to note that the startup script is configured such that: + +1. You may mix the use of Docker secrets and normal environment variables. +For example, you may wish to use `MYSQL_USER_FILE` and `MYSQL_PASSWORD_FILE`, +but wish to specify the database name with `MYSQL_DATABASE` + +2. If both a normal environment variable and its corresponding secret are defined +in the same command line, or section within a [Compose](https://docs.docker.com/compose/) file, +the secret will take precedence. For instance, if both `MYSQL_PASSWORD` +and `MYSQL_PASSWORD_FILE` are given, `MYSQL_PASSWORD_FILE` will be used. + Deploying Guacamole with PostgreSQL authentication -------------------------------------------------- @@ -35,7 +58,10 @@ Deploying Guacamole with PostgreSQL authentication --link some-postgres:postgres \ -e POSTGRES_DATABASE=guacamole_db \ -e POSTGRES_USER=guacamole_user \ - -e POSTGRES_PASSWORD=some_password \ + -e POSTGRES_PASSWORD=some_password \ + -e POSTGRES_DATABASE_FILE=/run/secrets/ \ + -e POSTGRES_USER_FILE=/run/secrets/ \ + -e POSTGRES_PASSWORD_FILE=/run/secrets/ \ -d -p 8080:8080 guacamole/guacamole Linking Guacamole to PostgreSQL requires three environment variables. If any of @@ -44,7 +70,14 @@ the image will stop: 1. `POSTGRES_DATABASE` - The name of the database to use for Guacamole authentication. 2. `POSTGRES_USER` - The user that Guacamole will use to connect to PostgreSQL. -3. `POSTGRES_PASSWORD` - The password that Guacamole will provide when connecting to PostgreSQL as `POSTGRES_USER`. +3. `POSTGRES_PASSWORD` - The password that Guacamole will provide when connecting to +PostgreSQL as `POSTGRES_USER`. +4. `POSTGRES_DATABASE_FILE` - The path of the docker secret containing the name of database +to use for Guacamole authentication. +5. `POSTGRES_USER_FILE` - The path of the docker secret containing the name of the +user that Guacamole will use to connect to PostgreSQL. +6. `POSTGRES_PASSWORD_FILE` - The path of the docker secret containing the password +that Guacamole will provide when connecting to PostgreSQL as `POSTGRES_USER. ### Initializing the PostgreSQL database @@ -81,6 +114,9 @@ Deploying Guacamole with MySQL authentication -e MYSQL_DATABASE=guacamole_db \ -e MYSQL_USER=guacamole_user \ -e MYSQL_PASSWORD=some_password \ + -e MYSQL_DATABASE_FILE=/run/secrets/ \ + -e MYSQL_USER_FILE=/run/secrets/ \ + -e MYSQL_PASSWORD_FILE=/run/secrets/ \ -d -p 8080:8080 guacamole/guacamole Linking Guacamole to MySQL requires three environment variables. If any of @@ -89,7 +125,14 @@ the image will stop: 1. `MYSQL_DATABASE` - The name of the database to use for Guacamole authentication. 2. `MYSQL_USER` - The user that Guacamole will use to connect to MySQL. -3. `MYSQL_PASSWORD` - The password that Guacamole will provide when connecting to MySQL as `MYSQL_USER`. +3. `MYSQL_PASSWORD` - The password that Guacamole will provide when connecting +to MySQL as `MYSQL_USER`. +4. `MYSQL_DATABASE_FILE` - The path of the docker secret containing the name of the +database to use for Guacamole authentication. +5. `MYSQL_USER_FILE` - The path of the docker secret containing the name of the user +that Guacamole will use to connect to MySQL. +6. `MYSQL_PASSWORD_FILE` - The path of the docker secret containing the password +that Guacamole will provide when connecting to MySQL as`MYSQL_USER`. ### Initializing the MySQL database diff --git a/guacamole-docker/bin/start.sh b/guacamole-docker/bin/start.sh index 721d57fb4..6d5af95bb 100755 --- a/guacamole-docker/bin/start.sh +++ b/guacamole-docker/bin/start.sh @@ -84,6 +84,29 @@ set_optional_property() { } +# Print error message regarding missing required variables for MySQL authentication +mysql_missing_vars() { + cat <