From ce375431568421d811a676e5ce7ff63f0e092962 Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Sat, 24 Nov 2018 21:16:22 +0100
Subject: [PATCH] Improve determination of mount source inside docker container

---
 composer.json   |  1 +
 src/Handler.php | 27 ++++++++++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/composer.json b/composer.json
index 5f21f31..4c165ec 100644
--- a/composer.json
+++ b/composer.json
@@ -24,6 +24,7 @@
         "source": "https://gitlab.lakedrops.com/composer/plugin/docker4drupal/tree/master"
     },
     "require": {
+        "ext-json": "*",
         "php": ">=5.6",
         "composer-plugin-api": "^1.0.0",
         "lakedrops/composer-scripts": "^1.1.0",
diff --git a/src/Handler.php b/src/Handler.php
index 83c93a2..10ad213 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -282,7 +282,7 @@ class Handler extends BaseHandler {
       $projectRoot = getcwd();
     }
     else {
-      $projectRoot = $options['ci_home'] . $projectRoot;
+      $projectRoot = $this->getDockerMountSource($projectRoot);
     }
     $options['projectroot'] = $projectRoot;
 
@@ -321,4 +321,29 @@ class Handler extends BaseHandler {
     return isset($local_addrs[$interface]) ? $local_addrs[$interface] : '127.0.0.1';
   }
 
+  /**
+   * @param $projectRoot
+   *
+   * @return string
+   */
+  private function getDockerMountSource($projectRoot) {
+    try {
+      $output = [];
+      exec('basename "$(cat /proc/1/cpuset)"', $output);
+      $id = reset($output);
+      $output = [];
+      exec('docker container inspect ' . $id, $output);
+      $container = json_decode(implode('', $output), TRUE)[0];
+      foreach ($container['Mounts'] as $mount) {
+        if (strpos($projectRoot, $mount['Destination']) === 0) {
+          return $mount['Source'] . substr($projectRoot, strlen($mount['Destination']));
+        }
+      }
+    }
+    catch (\Exception $ex) {
+      // Ignore.
+    }
+    return getcwd();
+  }
+
 }
-- 
GitLab