Skip to main content

Python library to use the pseudo-tty of a docker container

Project description

# Docker PTY

Provides the functionality needed to operate the pseudo-tty (PTY) allocated to
a docker container, using the Python client.

## Installation

Via pip:

```
pip install dockerpty
```

Dependencies:

* docker-py>=0.3.1

However, this library does not explicitly declare this dependency in PyPi for a
number of reasons. It is assumed you have it installed.

## Usage

The following example will run busybox in a docker container and place the user
at the shell prompt via Python.

This obviously only works when run in a terminal.

``` python
import docker
import dockerpty

client = docker.Client()
container = client.create_container(
image='busybox:latest',
stdin_open=True,
tty=True,
command='/bin/sh',
)
client.start(container)

dockerpty.PseudoTerminal(client, container).start()
```

When the `PseudoTerminal` is started, control is yielded to the container's
PTY until the container exits, or the container's PTY is closed.

This is a safe operation and all resources are restored back to their original
states.

## How it works

In a terminal, the three file descriptors stdin, stdout and stderr are all
connected to the controlling terminal (TTY). When you pass the `tty=True` flag
to docker's `create_container()`, docker allocates a fake TTY inside the
container (a PTY) to which the container's stdin, stdout and stderr are all
connected.

The docker API provides a way to access the three sockets connected to the PTY.
If with access to the host system's TTY file descriptors and the container's
PTY file descriptors, it is trivial to simply 'pipe' data written to these file
descriptors between the host and the container. Doing this makes the user's
terminal effectively become the pseudo-terminal from inside the container.

In reality it's a bit more complicated than this, since care must be taken to
put the host terminal into raw mode (where keys such as enter are not
interpreted with any special meaning) and restore it on exit. Additionally, the
container's stdout and stderr streams along with `sys.stdin` must be made
non-blocking so that they can be used with `select()` without blocking the main
process. These attributes are restored on exit.

The size of a terminal cannot be controlled by sending data to stdin and can
only be controlled by the terminal program itself. Since the pseudo-terminal is
running inside a real terminal, it is import that the size of the PTY be kept
the same as that of the presenting TTY. For this reason, docker provides an API
call to resize the allocated PTY. A SIGWINCH handler is used to detect window
size changes and resize the pseudo-terminal as needed.

## Planned

* Implement the "detach" functionality provided by the official docker client
- Pressing <kbd>C-p</kbd><kbd>C-q</kbd> detaches from the PTY in docker
* Any other keyboard shortcuts that users may think useful

## Copyright & Licensing

Copyright &copy; 2014 Chris Corbyn. See the LICENSE.txt file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dockerpty-0.0.2.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

dockerpty-0.0.2.linux-x86_64.tar.gz (8.5 kB view details)

Uploaded Source

File details

Details for the file dockerpty-0.0.2.tar.gz.

File metadata

  • Download URL: dockerpty-0.0.2.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for dockerpty-0.0.2.tar.gz
Algorithm Hash digest
SHA256 ef697e9806f093effd38d439f1ce85739e42ee24fab8fdd1db562cf7b2c5a5db
MD5 c2da472d7b5c116ae63ddd470e7913dc
BLAKE2b-256 9b4d91a0f1bd372c9d8548bc5fbc6a220c1c5944561e6fc9c29ea0a857e6357c

See more details on using hashes here.

Provenance

File details

Details for the file dockerpty-0.0.2.linux-x86_64.tar.gz.

File metadata

File hashes

Hashes for dockerpty-0.0.2.linux-x86_64.tar.gz
Algorithm Hash digest
SHA256 cf46fcd088c3032e28df935000c877421dec42f91a538084a31a90a371f8b23c
MD5 6f529834176a8260f71d34710ce124fa
BLAKE2b-256 c591e0173de84b4e157c2929825892f5c8f99c15c80432ae52b23155d5bea301

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page