diff --git a/.dockerignore b/.dockerignore
index 1c6905b1bbb3cb8e14cf6ac8a0cf1786c37532b7..0b51345cbdb08abc4ca05b0a8995c9c80190e263 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -9,6 +9,7 @@
 !pyproject.toml
 !poetry.lock
 !Cargo.lock
+!Cargo.toml
 !build_rust.py
 
 rust/target
diff --git a/changelog.d/14129.bugfix b/changelog.d/14129.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..2c016c0c4a7a3231ef41db930124b8e4ca26a074
--- /dev/null
+++ b/changelog.d/14129.bugfix
@@ -0,0 +1 @@
+Fix an issue with Docker images causing the Rust dependencies to not be pinned correctly.
diff --git a/docker/Dockerfile b/docker/Dockerfile
index b20951d4cf62613c8c45d083b3654ccadb6d2e60..8be49681b4146c29fb9da99804a1f47828405e31 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -121,7 +121,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
 COPY synapse /synapse/synapse/
 COPY rust /synapse/rust/
 # ... and what we need to `pip install`.
-COPY pyproject.toml README.rst build_rust.py /synapse/
+COPY pyproject.toml README.rst build_rust.py Cargo.toml Cargo.lock /synapse/
 
 # Repeat of earlier build argument declaration, as this is a new build stage.
 ARG TEST_ONLY_IGNORE_POETRY_LOCKFILE