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