diff --git a/changelog.d/5135.misc b/changelog.d/5135.misc
new file mode 100644
index 0000000000000000000000000000000000000000..eab06dd91d31bcca5eaf193cadaf20abccf3972b
--- /dev/null
+++ b/changelog.d/5135.misc
@@ -0,0 +1 @@
+Ensure that we have `urllib3` <1.25, to resolve incompatibility with `requests`.
\ No newline at end of file
diff --git a/docker/Dockerfile-dhvirtualenv b/docker/Dockerfile-dhvirtualenv
index 224c92352d0d6ac5d7e6440716c3a4ed532a6592..3de032cf8cc67f0e6dc6ee2bfc474ae5b9b84cd9 100644
--- a/docker/Dockerfile-dhvirtualenv
+++ b/docker/Dockerfile-dhvirtualenv
@@ -55,7 +55,8 @@ RUN apt-get update -qq -o Acquire::Languages=none \
         python3-pip \
         python3-setuptools \
         python3-venv \
-        sqlite3
+        sqlite3 \
+        libpq-dev
 
 COPY --from=builder /dh-virtualenv_1.1-1_all.deb /
 
diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py
index f71e21ff4de761faf4767fffe958f0936712b461..c75119a030bd5d859e16de11613a97c50f344320 100644
--- a/synapse/python_dependencies.py
+++ b/synapse/python_dependencies.py
@@ -69,6 +69,14 @@ REQUIREMENTS = [
     "attrs>=17.4.0",
 
     "netaddr>=0.7.18",
+
+    # requests is a transitive dep of treq, and urlib3 is a transitive dep
+    # of requests, as well as of sentry-sdk.
+    #
+    # As of requests 2.21, requests does not yet support urllib3 1.25.
+    # (If we do not pin it here, pip will give us the latest urllib3
+    # due to the dep via sentry-sdk.)
+    "urllib3<1.25",
 ]
 
 CONDITIONAL_REQUIREMENTS = {