diff --git a/compose/cli/main.py b/compose/cli/main.py index c69f49c7f..4de7c5caa 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -435,7 +435,7 @@ class TopLevelCommand(object): not supported in API < 1.25) """ environment = Environment.from_env_file(self.project_dir) - use_cli = not environment.get_boolean('COMPOSE_EXEC_NO_CLI') + use_cli = not environment.get_boolean('COMPOSE_INTERACTIVE_NO_CLI') index = int(options.get('--index')) service = self.project.get_service(options['SERVICE']) detach = options['-d'] @@ -794,7 +794,7 @@ class TopLevelCommand(object): command = service.options.get('command') container_options = build_container_options(options, detach, command) - run_one_off_container(container_options, self.project, service, options) + run_one_off_container(container_options, self.project, service, options, self.project_dir) def scale(self, options): """ @@ -1201,7 +1201,7 @@ def build_container_options(options, detach, command): return container_options -def run_one_off_container(container_options, project, service, options): +def run_one_off_container(container_options, project, service, options, project_dir='.'): if not options['--no-deps']: deps = service.get_dependency_names() if deps: @@ -1228,10 +1228,13 @@ def run_one_off_container(container_options, project, service, options): if options['--rm']: project.client.remove_container(container.id, force=True, v=True) + environment = Environment.from_env_file(project_dir) + use_cli = not environment.get_boolean('COMPOSE_INTERACTIVE_NO_CLI') + signals.set_signal_handler_to_shutdown() try: try: - if IS_WINDOWS_PLATFORM: + if IS_WINDOWS_PLATFORM or use_cli: service.connect_container_to_networks(container) exit_code = call_docker(["start", "--attach", "--interactive", container.id]) else: diff --git a/tests/unit/cli_test.py b/tests/unit/cli_test.py index 19f6c9782..d078614e6 100644 --- a/tests/unit/cli_test.py +++ b/tests/unit/cli_test.py @@ -97,7 +97,9 @@ class CLITestCase(unittest.TestCase): @pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason="requires dockerpty") @mock.patch('compose.cli.main.RunOperation', autospec=True) @mock.patch('compose.cli.main.PseudoTerminal', autospec=True) + @mock.patch.dict(os.environ) def test_run_interactive_passes_logs_false(self, mock_pseudo_terminal, mock_run_operation): + os.environ['COMPOSE_INTERACTIVE_NO_CLI'] = 'true' mock_client = mock.create_autospec(docker.APIClient) mock_client.api_version = DEFAULT_DOCKER_API_VERSION project = Project.from_config(