mirror of https://github.com/docker/docker-py.git
Implemented exec command.
This commit is contained in:
parent
d26428b633
commit
fce477243e
|
@ -34,7 +34,7 @@ from .tls import TLSConfig
|
|||
if not six.PY3:
|
||||
import websocket
|
||||
|
||||
DEFAULT_DOCKER_API_VERSION = '1.12'
|
||||
DEFAULT_DOCKER_API_VERSION = '1.15'
|
||||
DEFAULT_TIMEOUT_SECONDS = 60
|
||||
STREAM_HEADER_SIZE_BYTES = 8
|
||||
|
||||
|
@ -542,6 +542,47 @@ class Client(requests.Session):
|
|||
def events(self):
|
||||
return self._stream_helper(self.get(self._url('/events'), stream=True))
|
||||
|
||||
def execute(self, container, cmd, detach=False, stdout=True, stderr=True,
|
||||
stream=False, tty=False):
|
||||
if utils.compare_version('1.15', self._version) < 0:
|
||||
raise Exception('Exec is not supported in API < 1.15!')
|
||||
if isinstance(container, dict):
|
||||
container = container.get('Id')
|
||||
if not isinstance(cmd, (list, tuple)):
|
||||
cmd = [cmd]
|
||||
|
||||
data = {
|
||||
'Container': container,
|
||||
'User': '',
|
||||
'Privileged': False,
|
||||
'Tty': tty,
|
||||
'AttachStdin': False,
|
||||
'AttachStdout': stdout,
|
||||
'AttachStderr': stderr,
|
||||
'Detach': detach,
|
||||
'Cmd': cmd
|
||||
}
|
||||
|
||||
# create the command
|
||||
res = self._post_json(self._url('/containers/shell/exec'), data=data)
|
||||
self._raise_for_status(res)
|
||||
|
||||
# start the command
|
||||
cmd_id = res.json().get('Id')
|
||||
res = self._post_json(self._url('/exec/{0}/start'.format(cmd_id)), data=data,
|
||||
stream=stream)
|
||||
self._raise_for_status(res)
|
||||
if stream:
|
||||
return self._multiplexed_socket_stream_helper(res)
|
||||
elif six.PY3:
|
||||
return bytes().join(
|
||||
[x for x in self._multiplexed_buffer_helper(res)]
|
||||
)
|
||||
else:
|
||||
return str().join(
|
||||
[x for x in self._multiplexed_buffer_helper(res)]
|
||||
)
|
||||
|
||||
def export(self, container):
|
||||
if isinstance(container, dict):
|
||||
container = container.get('Id')
|
||||
|
|
Loading…
Reference in New Issue