You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2026/05/01 02:30:09 UTC

(doris) branch branch-4.1 updated: branch-4.1: [fix](docker) doris compose supports docker compose v2 #62851 (#62882)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new d805f584d53 branch-4.1: [fix](docker) doris compose supports docker compose v2 #62851 (#62882)
d805f584d53 is described below

commit d805f584d53afe2251f11ff1405727340ba408f4
Author: github-actions[bot] <41...@users.noreply.github.com>
AuthorDate: Fri May 1 10:30:00 2026 +0800

    branch-4.1: [fix](docker) doris compose supports docker compose v2 #62851 (#62882)
    
    Cherry-picked from #62851
    
    Co-authored-by: walter <ma...@selectdb.com>
---
 docker/runtime/doris-compose/utils.py | 51 +++++++++++++++++++++++++++++++++--
 1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/docker/runtime/doris-compose/utils.py b/docker/runtime/doris-compose/utils.py
index 4ff87ef2229..99912f0c003 100644
--- a/docker/runtime/doris-compose/utils.py
+++ b/docker/runtime/doris-compose/utils.py
@@ -26,6 +26,7 @@ import subprocess
 import sys
 import time
 import yaml
+import shlex
 
 DORIS_PREFIX = "doris-"
 
@@ -215,6 +216,51 @@ def exec_shell_command(command, ignore_errors=False, output_real_time=False):
     return exitcode, out
 
 
+def detect_docker_compose_cmd():
+    """
+    Return compose command prefix as a list.
+
+    Priority:
+    1. DORIS_DOCKER_COMPOSE_CMD env override
+       e.g. "docker compose" or "docker-compose" or "/path/to/docker-compose"
+    2. docker compose v2
+    3. docker-compose v1 / wrapper
+    """
+    def _command_available(cmd):
+        try:
+            subprocess.run(
+                cmd,
+                stdout=subprocess.DEVNULL,
+                stderr=subprocess.DEVNULL,
+                check=True,
+            )
+            return True
+        except (subprocess.CalledProcessError, FileNotFoundError):
+            return False
+
+    override = os.environ.get("DORIS_DOCKER_COMPOSE_CMD")
+    if override:
+        cmd = shlex.split(override)
+        if not _command_available(cmd + ["version"]):
+            raise RuntimeError(
+                "DORIS_DOCKER_COMPOSE_CMD is set but not usable: {}".format(override)
+            )
+        return cmd
+
+    # Prefer Compose v2.
+    if _command_available(["docker", "compose", "version"]):
+        return ["docker", "compose"]
+
+    # Fallback for old machines.
+    if _command_available(["docker-compose", "version"]):
+        return ["docker-compose"]
+
+    raise RuntimeError(
+        "Neither 'docker compose' nor 'docker-compose' is available. "
+        "Please install Docker Compose v2 plugin or legacy docker-compose."
+    )
+
+
 def exec_docker_compose_command(compose_file,
                                 command,
                                 options=None,
@@ -224,8 +270,9 @@ def exec_docker_compose_command(compose_file,
     if nodes != None and not nodes:
         return 0, "Skip"
 
-    compose_cmd = "docker-compose -f {}  {}  {} {} {}".format(
-        compose_file, command, " ".join(options) if options else "",
+    docker_compose_cmd = detect_docker_compose_cmd()
+    compose_cmd = "{} -f {}  {}  {} {}".format(
+        " ".join(docker_compose_cmd), compose_file, command, " ".join(options) if options else "",
         " ".join([node.service_name() for node in nodes]) if nodes else "",
         user_command if user_command else "")
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org