From 3cb03be0fd24663009c50cf5aaa7b28ac9d1079e Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 1 Aug 2024 07:10:32 +0200 Subject: [PATCH] Docker: Fix cmdbridge init when docker is remote If the user has specified a remote path for the "docker" executable it is not possible to simply bind the cmdbridge as its on a different device. We fall back to copying the cmdbridge in this case. Task-number: QTCREATORBUG-31364 Change-Id: I03b5594c1c942fe6539a45a32d2a31e24f2a493b Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 184142112d1..451921e1a50 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -604,8 +604,12 @@ DockerDevice::DockerDevice(std::unique_ptr deviceSettings) return make_unexpected(cmdBridgePath.error()); auto fAccess = std::make_unique(d); - expected_str initResult = fAccess->init( - rootPath().withNewPath("/tmp/_qtc_cmdbridge")); + expected_str initResult; + if (!cmdBridgePath->isSameDevice(Docker::Internal::settings().dockerBinaryPath())) { + initResult = fAccess->deployAndInit(Core::ICore::libexecPath(), rootPath()); + } else { + initResult = fAccess->init(rootPath().withNewPath("/tmp/_qtc_cmdbridge")); + } if (!initResult) return make_unexpected(initResult.error()); @@ -873,7 +877,7 @@ QStringList DockerDevicePrivate::createMountArgs() const for (const FilePath &m : deviceSettings->mounts()) mounts.append({m, m}); - if (cmdBridgePath) + if (cmdBridgePath && cmdBridgePath->isSameDevice(settings().dockerBinaryPath())) mounts.append({cmdBridgePath.value(), FilePath("/tmp/_qtc_cmdbridge")}); for (const MountPair &mi : mounts) {