diff --git a/python_on_whales/components/compose/cli_wrapper.py b/python_on_whales/components/compose/cli_wrapper.py index 63b33f5a..99db411e 100644 --- a/python_on_whales/components/compose/cli_wrapper.py +++ b/python_on_whales/components/compose/cli_wrapper.py @@ -663,8 +663,8 @@ def run( command: List[str] = [], build: bool = False, detach: bool = False, - # entrypoint: Optional[List[str]] = None, - # envs: Dict[str, str] = {}, + entrypoint: Optional[List[str]] = None, + envs: Dict[str, str] = {}, labels: Dict[str, str] = {}, name: Optional[str] = None, tty: bool = True, @@ -691,6 +691,8 @@ def run( command: The command to execute. detach: if `True`, returns immediately with the Container. If `False`, returns the command stdout as string. + entrypoint: The entrypoint to execute. + envs: A dictionary of environment variables to set in the container. labels: Add or override labels name: Assign a name to the container. dependencies: Also start linked services. @@ -728,6 +730,9 @@ def run( full_cmd = self.docker_compose_cmd + ["run"] full_cmd.add_flag("--build", build) full_cmd.add_flag("--detach", detach) + full_cmd.add_simple_arg("--entrypoint", entrypoint) + for key, value in envs.items(): + full_cmd.add_simple_arg("--env", f"{key}={value}") full_cmd.add_simple_arg("--name", name) full_cmd.add_flag("--no-TTY", not tty) full_cmd.add_flag("--no-deps", not dependencies) diff --git a/tests/python_on_whales/components/test_compose.py b/tests/python_on_whales/components/test_compose.py index 99e11ba1..fff72ff2 100644 --- a/tests/python_on_whales/components/test_compose.py +++ b/tests/python_on_whales/components/test_compose.py @@ -753,6 +753,30 @@ def test_docker_compose_run_labels(): docker.compose.down(timeout=1) +def test_compose_run_entrypoint(): + result = docker.compose.run( + "dodo", + ["cmd-is-argument-for-echo"], + entrypoint="/bin/echo", + remove=True, + tty=False, + ) + + assert result == "cmd-is-argument-for-echo" + + +def test_compose_run_envs(): + result = docker.compose.run( + "dodo", + ["-c", "echo $VAR1,$VAR2"], + envs={"VAR1": "hello", "VAR2": "world"}, + remove=True, + tty=False, + ) + + assert result == "hello,world" + + def test_compose_version(): assert "Docker Compose version v2" in docker.compose.version()