| # attach |
| |
| <!---MARKER_GEN_START--> |
| Attach local standard input, output, and error streams to a running container |
| |
| ### Aliases |
| |
| `docker container attach`, `docker attach` |
| |
| ### Options |
| |
| | Name | Type | Default | Description | |
| |:--------------------------------|:---------|:--------|:----------------------------------------------------| |
| | [`--detach-keys`](#detach-keys) | `string` | | Override the key sequence for detaching a container | |
| | `--no-stdin` | `bool` | | Do not attach STDIN | |
| | `--sig-proxy` | `bool` | `true` | Proxy all received signals to the process | |
| |
| |
| <!---MARKER_GEN_END--> |
| |
| ## Description |
| |
| Use `docker attach` to attach your terminal's standard input, output, and error |
| (or any combination of the three) to a running container using the container's |
| ID or name. This lets you view its output or control it interactively, as |
| though the commands were running directly in your terminal. |
| |
| > [!NOTE] |
| > The `attach` command displays the output of the container's `ENTRYPOINT` and |
| > `CMD` process. This can appear as if the attach command is hung when in fact |
| > the process may simply not be writing any output at that time. |
| |
| You can attach to the same contained process multiple times simultaneously, |
| from different sessions on the Docker host. |
| |
| To stop a container, use `CTRL-c`. This key sequence sends `SIGKILL` to the |
| container. If `--sig-proxy` is true (the default),`CTRL-c` sends a `SIGINT` to |
| the container. If the container was run with `-i` and `-t`, you can detach from |
| a container and leave it running using the `CTRL-p CTRL-q` key sequence. |
| |
| > [!NOTE] |
| > A process running as PID 1 inside a container is treated specially by |
| > Linux: it ignores any signal with the default action. So, the process |
| > doesn't terminate on `SIGINT` or `SIGTERM` unless it's coded to do so. |
| |
| You can't redirect the standard input of a `docker attach` command while |
| attaching to a TTY-enabled container (using the `-i` and `-t` options). |
| |
| While a client is connected to container's `stdio` using `docker attach`, |
| Docker uses a ~1MB memory buffer to maximize the throughput of the application. |
| Once this buffer is full, the speed of the API connection is affected, and so |
| this impacts the output process' writing speed. This is similar to other |
| applications like SSH. Because of this, it isn't recommended to run |
| performance-critical applications that generate a lot of output in the |
| foreground over a slow client connection. Instead, use the `docker logs` |
| command to get access to the logs. |
| |
| ## Examples |
| |
| ### Attach to and detach from a running container |
| |
| The following example starts an Alpine container running `top` in detached mode, |
| then attaches to the container; |
| |
| ```console |
| $ docker run -d --name topdemo alpine top -b |
| |
| $ docker attach topdemo |
| |
| Mem: 2395856K used, 5638884K free, 2328K shrd, 61904K buff, 1524264K cached |
| CPU: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq |
| Load average: 0.15 0.06 0.01 1/567 6 |
| PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND |
| 1 0 root R 1700 0% 3 0% top -b |
| ``` |
| |
| As the container was started without the `-i`, and `-t` options, signals are |
| forwarded to the attached process, which means that the default `CTRL-p CTRL-q` |
| detach key sequence produces no effect, but pressing `CTRL-c` terminates the |
| container: |
| |
| ```console |
| <...> |
| PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND |
| 1 0 root R 1700 0% 7 0% top -b |
| ^P^Q |
| ^C |
| |
| $ docker ps -a --filter name=topdemo |
| |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| 96254a235bd6 alpine "top -b" 44 seconds ago Exited (130) 8 seconds ago topdemo |
| ``` |
| |
| Repeating the example above, but this time with the `-i` and `-t` options set; |
| |
| ```console |
| $ docker run -dit --name topdemo2 alpine /usr/bin/top -b |
| ``` |
| |
| Now, when attaching to the container, and pressing the `CTRL-p CTRL-q` ("read |
| escape sequence"), the Docker CLI is handling the detach sequence, and the |
| `attach` command is detached from the container. Checking the container's status |
| with `docker ps` shows that the container is still running in the background: |
| |
| ```console |
| $ docker attach topdemo2 |
| |
| Mem: 2405344K used, 5629396K free, 2512K shrd, 65100K buff, 1524952K cached |
| CPU: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq |
| Load average: 0.12 0.12 0.05 1/594 6 |
| PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND |
| 1 0 root R 1700 0% 3 0% top -b |
| read escape sequence |
| |
| $ docker ps -a --filter name=topdemo2 |
| |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| fde88b83c2c2 alpine "top -b" 22 seconds ago Up 21 seconds topdemo2 |
| ``` |
| |
| ### Get the exit code of the container's command |
| |
| And in this second example, you can see the exit code returned by the `bash` |
| process is returned by the `docker attach` command to its caller too: |
| |
| ```console |
| $ docker run --name test -dit alpine |
| 275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab |
| |
| $ docker attach test |
| /# exit 13 |
| |
| $ echo $? |
| 13 |
| |
| $ docker ps -a --filter name=test |
| |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| a2fe3fd886db alpine "/bin/sh" About a minute ago Exited (13) 40 seconds ago test |
| ``` |
| |
| ### <a name="detach-keys"></a> Override the detach sequence (--detach-keys) |
| |
| Use the `--detach-keys` option to override the Docker key sequence for detach. |
| This is useful if the Docker default sequence conflicts with key sequence you |
| use for other applications. There are two ways to define your own detach key |
| sequence, as a per-container override or as a configuration property on your |
| entire configuration. |
| |
| To override the sequence for an individual container, use the |
| `--detach-keys="<sequence>"` flag with the `docker attach` command. The format of |
| the `<sequence>` is either a letter [a-Z], or the `ctrl-` combined with any of |
| the following: |
| |
| * `a-z` (a single lowercase alpha character ) |
| * `@` (at sign) |
| * `[` (left bracket) |
| * `\\` (two backward slashes) |
| * `_` (underscore) |
| * `^` (caret) |
| |
| These `a`, `ctrl-a`, `X`, or `ctrl-\\` values are all examples of valid key |
| sequences. To configure a different configuration default key sequence for all |
| containers, see [**Configuration file** section](https://docs.docker.com/reference/cli/docker/#configuration-files). |