diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
index b9b3431..7289c88 100644
--- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
+++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\DependencyInjection;
 
 use Symfony\Component\DependencyInjection\ContainerBuilder as BaseContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
 
 /**
  * Drupal's dependency injection container.
@@ -20,6 +21,13 @@ class ContainerBuilder extends BaseContainerBuilder {
   public function __construct() {
     parent::__construct();
 
+    // Register the Drupal Kernel services.
+    $this->register('drupal.dispatcher', 'Symfony\Component\EventDispatcher\EventDispatcher');
+    $this->register('drupal.resolver', 'Symfony\Component\HttpKernel\Controller\ControllerResolver');
+    $this->register('drupal.kernel', 'Drupal\Core\DrupalKernel')
+      ->addArgument(new Reference('drupal.dispatcher'))
+      ->addArgument(new Reference('drupal.resolver'));
+
     // An interface language always needs to be available for t() and other
     // functions. This default is overridden by drupal_language_initialize()
     // during language negotiation.
diff --git a/index.php b/index.php
index 2f05bb3..46e010d 100644
--- a/index.php
+++ b/index.php
@@ -39,9 +39,6 @@ request($request);
 // @see Drupal\Core\EventSubscriber\LegacyRequestSubscriber;
 drupal_bootstrap(DRUPAL_BOOTSTRAP_CODE);
 
-$dispatcher = new EventDispatcher();
-$resolver = new ControllerResolver();
-
-$kernel = new DrupalKernel($dispatcher, $resolver);
+$kernel = drupal_container()->get('drupal.kernel');
 $response = $kernel->handle($request)->prepare($request)->send();
 $kernel->terminate($request, $response);
