Docker Engine API
  1. Container
Docker Engine API
  • System
    • Ping
      GET
    • Check auth configuration
      POST
    • Monitor events
      GET
    • Get system information
      GET
    • Get data usage information
      GET
    • Get version
      GET
  • Image
    • Build an image
    • Delete builder cache
    • Create a new image from a container
    • Create an image
    • Export several images
    • List Images
    • Import images
    • Delete unused images
    • Search images
    • Remove an image
    • Export an image
    • Get the history of an image
    • Inspect an image
    • Push an image
    • Tag an image
  • Config
    • List configs
    • Create a config
    • Delete a config
    • Inspect a config
    • Update a Config
  • Container
    • Create a container
      POST
    • List containers
      GET
    • Delete stopped containers
      POST
    • Remove a container
      DELETE
    • Get an archive of a filesystem resource in a container
      GET
    • Get information about files in a container
      HEAD
    • Extract an archive of files or folders to a directory in a container
      PUT
    • Attach to a container
      POST
    • Attach to a container via a websocket
      GET
    • Get changes on a container’s filesystem
      GET
    • Export a container
      GET
    • Inspect a container
      GET
    • Kill a container
      POST
    • Get container logs
      GET
    • Pause a container
      POST
    • Rename a container
      POST
    • Resize a container TTY
      POST
    • Restart a container
      POST
    • Start a container
      POST
    • Get container stats based on resource usage
      GET
    • Stop a container
      POST
    • List processes running inside a container
      GET
    • Unpause a container
      POST
    • Update a container
      POST
    • Wait for a container
      POST
  • Exec
    • Create an exec instance
    • Inspect an exec instance
    • Resize an exec instance
    • Start an exec instance
  • Distribution
    • Get image information from the registry
  • Network
    • List networks
    • Create a network
    • Delete unused networks
    • Remove a network
    • Inspect a network
    • Connect a container to a network
    • Disconnect a container from a network
  • Node
    • List nodes
    • Delete a node
    • Inspect a node
    • Update a node
  • Plugin
    • List plugins
    • Create a plugin
    • Get plugin privileges
    • Install a plugin
    • Remove a plugin
    • Disable a plugin
    • Enable a plugin
    • Inspect a plugin
    • Push a plugin
    • Configure a plugin
    • Upgrade a plugin
  • Secret
    • List secrets
    • Create a secret
    • Delete a secret
    • Inspect a secret
    • Update a Secret
  • Service
    • List services
    • Create a service
    • Delete a service
    • Inspect a service
    • Get service logs
    • Update a service
  • Session (experimental)
    • Initialize interactive session
  • Swarm
    • Inspect swarm
    • Initialize a new swarm
    • Join an existing swarm
    • Leave a swarm
    • Unlock a locked manager
    • Get the unlock key
    • Update a swarm
  • Task
    • List tasks
    • Inspect a task
  • Volume
    • List volumes
    • Create a volume
    • Delete unused volumes
    • Remove a volume
    • Inspect a volume
  • Get task logs
    GET
  1. Container

Attach to a container

/v1.33
/v1.33
/v1.33
/v1.33
POST
/containers/{id}/attach
Container
Attach to a container to read its output or send it input. You can attach to the same container multiple times and you can reattach to containers that have been detached.
Either the stream or logs parameter must be true for this endpoint to do anything.
See the documentation for the docker attach command for more details.

Hijacking#

This endpoint hijacks the HTTP connection to transport stdin, stdout, and stderr on the same socket.
This is the response from the daemon for an attach request:
HTTP/1.1 200 OK
Content-Type: application/vnd.docker.raw-stream

[STREAM]
After the headers and two new lines, the TCP connection can now be used for raw, bidirectional communication between the client and server.
To hint potential proxies about connection hijacking, the Docker client can also optionally send connection upgrade headers.
For example, the client sends this request to upgrade the connection:
POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1
Upgrade: tcp
Connection: Upgrade
The Docker daemon will respond with a 101 UPGRADED response, and will similarly follow with the raw stream:
HTTP/1.1 101 UPGRADED
Content-Type: application/vnd.docker.raw-stream
Connection: Upgrade
Upgrade: tcp

[STREAM]

Stream format#

When the TTY setting is disabled in POST /containers/create, the stream over the hijacked connected is multiplexed to separate out stdout and stderr. The stream consists of a series of frames, each containing a header and a payload.
The header contains the information which the stream writes (stdout or stderr). It also contains the size of the associated frame encoded in the last four bytes (uint32).
It is encoded on the first eight bytes like this:
STREAM_TYPE can be:
0: stdin (is written on stdout)
1: stdout
2: stderr
SIZE1, SIZE2, SIZE3, SIZE4 are the four bytes of the uint32 size encoded as big endian.
Following the header is the payload, which is the specified number of bytes of STREAM_TYPE.
The simplest way to implement this protocol is the following:
1.
Read 8 bytes.
2.
Choose stdout or stderr depending on the first byte.
3.
Extract the frame size from the last four bytes.
4.
Read the extracted size and output it on the correct output.
5.
Goto 1.

Stream format when using a TTY#

When the TTY setting is enabled in POST /containers/create, the stream is not multiplexed. The data exchanged over the hijacked connection is simply the raw data from the process PTY and client's stdin.
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request POST '/v1.33/containers//attach'
Response Response Example
200 - Example 1
{}

Request

Path Params
id
string 
required
ID or name of the container
Query Params
detachKeys
string 
optional
Override the key sequence for detaching a container.Format is a single character [a-Z] or ctrl-<value> where <value> is one of: a-z, @, ^, [, , or _.
logs
string 
optional
Replay previous logs from the container.
This is useful for attaching to a container that has started and you want to output everything since the container started.
If stream is also enabled, once all the previous output has been returned, it will seamlessly transition into streaming current output.
stream
string 
optional
Stream attached streams from the time the request was made onwards
stdin
string 
optional
Attach to stdin
stdout
string 
optional
Attach to stdout
stderr
string 
optional
Attach to stderr

Responses

🟢200no error, hints proxy about hijacking
application/json
Body
object {0}
🟢200no error, no upgrade header found
🟠400bad parameter
🟠404no such container
🔴500server error
Modified at 2022-09-10 17:56:06
Previous
Extract an archive of files or folders to a directory in a container
Next
Attach to a container via a websocket
Built with