summaryrefslogtreecommitdiff
path: root/compose/cli
diff options
context:
space:
mode:
authorAanand Prasad <aanand.prasad@gmail.com>2016-09-26 13:18:16 +0100
committerAanand Prasad <aanand.prasad@gmail.com>2016-10-14 17:31:21 +0100
commit8314a48a2e96a0e34e913fb6b3a2973f1bceec5a (patch)
tree63c9805428829b0143afc5a372b9598d290509d0 /compose/cli
parent8b383ad79571fd15e47c88dff71e2a4836bd3ffd (diff)
Attach interactively on Windows by shelling out
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
Diffstat (limited to 'compose/cli')
-rw-r--r--compose/cli/main.py60
1 files changed, 38 insertions, 22 deletions
diff --git a/compose/cli/main.py b/compose/cli/main.py
index 438753a2..cbbb1325 100644
--- a/compose/cli/main.py
+++ b/compose/cli/main.py
@@ -7,6 +7,7 @@ import functools
import json
import logging
import re
+import subprocess
import sys
from inspect import getdoc
from operator import attrgetter
@@ -406,11 +407,6 @@ class TopLevelCommand(object):
service = self.project.get_service(options['SERVICE'])
detach = options['-d']
- if IS_WINDOWS_PLATFORM and not detach:
- raise UserError(
- "Interactive mode is not yet supported on Windows.\n"
- "Please pass the -d flag when using `docker-compose exec`."
- )
try:
container = service.get_container(number=index)
except ValueError as e:
@@ -418,6 +414,28 @@ class TopLevelCommand(object):
command = [options['COMMAND']] + options['ARGS']
tty = not options["-T"]
+ if IS_WINDOWS_PLATFORM and not detach:
+ args = ["docker", "exec"]
+
+ if options["-d"]:
+ args += ["--detach"]
+ else:
+ args += ["--interactive"]
+
+ if not options["-T"]:
+ args += ["--tty"]
+
+ if options["--privileged"]:
+ args += ["--privileged"]
+
+ if options["--user"]:
+ args += ["--user", options["--user"]]
+
+ args += [container.id]
+ args += command
+
+ sys.exit(subprocess.call(args))
+
create_exec_options = {
"privileged": options["--privileged"],
"user": options["--user"],
@@ -675,12 +693,6 @@ class TopLevelCommand(object):
service = self.project.get_service(options['SERVICE'])
detach = options['-d']
- if IS_WINDOWS_PLATFORM and not detach:
- raise UserError(
- "Interactive mode is not yet supported on Windows.\n"
- "Please pass the -d flag when using `docker-compose run`."
- )
-
if options['--publish'] and options['--service-ports']:
raise UserError(
'Service port mapping and manual port mapping '
@@ -969,17 +981,21 @@ def run_one_off_container(container_options, project, service, options):
signals.set_signal_handler_to_shutdown()
try:
try:
- operation = RunOperation(
- project.client,
- container.id,
- interactive=not options['-T'],
- logs=False,
- )
- pty = PseudoTerminal(project.client, operation)
- sockets = pty.sockets()
- service.start_container(container)
- pty.start(sockets)
- exit_code = container.wait()
+ if IS_WINDOWS_PLATFORM:
+ args = ["docker", "start", "--attach", "--interactive", container.id]
+ exit_code = subprocess.call(args)
+ else:
+ operation = RunOperation(
+ project.client,
+ container.id,
+ interactive=not options['-T'],
+ logs=False,
+ )
+ pty = PseudoTerminal(project.client, operation)
+ sockets = pty.sockets()
+ service.start_container(container)
+ pty.start(sockets)
+ exit_code = container.wait()
except signals.ShutdownException:
project.client.stop(container.id)
exit_code = 1