diff --git a/docker/README.md b/docker/README.md
index 5c85c538a8c9cdf9b4ddca4c6a49d5b11050d2d8..a42d1d24b6f8148d33dfe2d4b8dc724f4284c035 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -186,6 +186,8 @@ The following environment variables are supported in this mode:
 * `SYNAPSE_REPORT_STATS` (mandatory, `yes` or `no`): whether to enable
   anonymous statistics reporting.
 * `SYNAPSE_CONFIG_PATH` (mandatory): path to the file to be generated.
+* `SYNAPSE_CONFIG_DIR`: where additional config files (such as the log config
+  and event signing key) will be stored. Defaults to `/data`.
 * `SYNAPSE_DATA_DIR`: where the generated config will put persistent data
   such as the datatase and media store. Defaults to `/data`.
 * `UID`, `GID`: the user id and group id to use for creating the data
diff --git a/docker/start.py b/docker/start.py
index ad968b2a67e78fc1a5510b46ffc6cf575e288934..99107a9d548a39045a5686fe6783d8a5a748e2e0 100755
--- a/docker/start.py
+++ b/docker/start.py
@@ -116,6 +116,7 @@ def run_generate_config(environ, ownership):
         if v not in environ:
             error("Environment variable '%s' is mandatory in `generate` mode." % (v,))
 
+    config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
     data_dir = environ.get("SYNAPSE_DATA_DIR", "/data")
 
     # make sure that synapse has perms to write to the data dir.
@@ -131,6 +132,8 @@ def run_generate_config(environ, ownership):
         environ["SYNAPSE_REPORT_STATS"],
         "--config-path",
         environ["SYNAPSE_CONFIG_PATH"],
+        "--config-directory",
+        config_dir,
         "--data-directory",
         data_dir,
         "--generate-config",