diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php
index f1ea8cd5b79bb16ad0e3e8ca9811379afe966348..3fa6c3848397c0e76d9c79e0f3a0c2eb06808802 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php
@@ -20,11 +20,18 @@ public function process(ContainerBuilder $container) {
 
     $stream_wrapper_manager = $container->getDefinition('stream_wrapper_manager');
 
-    foreach ($container->findTaggedServiceIds('stream_wrapper') as $id => $attributes) {
+    foreach ($container->findTaggedServiceIds('stream_wrapper') as $id => $tags) {
       $class = $container->getDefinition($id)->getClass();
-      $scheme = $attributes[0]['scheme'];
-
-      $stream_wrapper_manager->addMethodCall('addStreamWrapper', [$id, $class, $scheme]);
+      // Loop through all the tags for this stream wrapper as we may have
+      // multiple schemes.
+      foreach ($tags as $attributes) {
+        $scheme = $attributes['scheme'];
+        $stream_wrapper_manager->addMethodCall('addStreamWrapper', [
+          $id,
+          $class,
+          $scheme,
+        ]);
+      }
     }
   }
 
diff --git a/core/modules/file/tests/file_test/file_test.services.yml b/core/modules/file/tests/file_test/file_test.services.yml
index 51b048997a23de7eb625413c5f78827fd5078dc4..e70db1ebd65173b2480a6c076f5ff8880321b423 100644
--- a/core/modules/file/tests/file_test/file_test.services.yml
+++ b/core/modules/file/tests/file_test/file_test.services.yml
@@ -15,3 +15,8 @@ services:
     class: Drupal\file_test\StreamWrapper\DummyExternalReadOnlyWrapper
     tags:
       - { name: stream_wrapper, scheme: dummy-external-readonly }
+  stream_wrapper.dummy_multiple:
+    class: Drupal\file_test\StreamWrapper\DummyMultipleStreamWrapper
+    tags:
+      - { name: stream_wrapper, scheme: dummy1 }
+      - { name: stream_wrapper, scheme: dummy2 }
diff --git a/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php b/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php
new file mode 100644
index 0000000000000000000000000000000000000000..76ac49d97a5fe302e82f27eeacd65bf777134e29
--- /dev/null
+++ b/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Drupal\file_test\StreamWrapper;
+
+/**
+ * Helper class for testing the stream wrapper registry.
+ *
+ * Dummy stream wrapper implementation (dummy1://, dummy2://).
+ */
+class DummyMultipleStreamWrapper extends DummyStreamWrapper {}
diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
index d9b213f45a722c88c9c6757c049b4e334151822a..09718581e4c3614a4cc179ae82d39c213603751c 100644
--- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
@@ -324,6 +324,8 @@ public function testModuleStreamWrappers() {
     file_exists('dummy://');
     $stream_wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers();
     $this->assertTrue(isset($stream_wrappers['dummy']));
+    $this->assertTrue(isset($stream_wrappers['dummy1']));
+    $this->assertTrue(isset($stream_wrappers['dummy2']));
   }
 
   /**