
Docker超入門:exec と attach を使い分ける!Dockerコンテナ接続の基本
Dockerを使っていて「コンテナに接続したい!」と思ったときに登場するのが docker exec と docker container attach です。どちらも「実行中のコンテナに入る」ためのコマンドですが、その動作には大きな違いがあります。ここでは、それぞれの役割や使い分けのコツを、表や図を使いながらわかりやすく解説していきます。

docker exec とは?
docker exec は「実行中のコンテナの中で、新しいコマンドを追加で動かす」ためのコマンドです。
- 新しいプロセスを立ち上げるので、既存のメインプロセス(PID=1)とは独立して動作します。
- そのため
exitしてもコンテナ自体は停止せず、バックグラウンドで稼働を続けます。 - ちょっとしたコマンド実行や、シェルを新規に開いて作業するときに便利です。
書式
docker exec [オプション] コンテナ名/ID コマンドよく使うオプション
| オプション | 説明 |
|---|---|
| -i | 標準入力を有効にする。 |
| -t | 仮想端末(tty)を割り当てる。 |
| -it | 対話的に操作するための組み合わせ |
| -d | バックグラウンドでコマンドを実行する。 |
実行例
docker exec -it my_container bash→ my_container の中に新しくbashシェルを立ち上げて接続できます。exitしてもコンテナは停止しません。
docker container attach とは?
docker container attach は「コンテナのメインプロセス(PID=1)」に直接接続します。
- すでに動いているプロセスにそのまま入るので、新しいプロセスは作られません。
- 接続した状態で
exitを打つと、コンテナ全体が停止してしまいます。 - つまり、「そのコンテナの本体作業にそのまま参加する」イメージです。
書式
docker container attach コンテナ名/ID特徴
| 項目 | 説明 |
|---|---|
| 接続対象 | PID=1(メインプロセス) |
| exit時 | コンテナが停止する |
| 利用条件 | コンテナ内でシェルや標準入出力が有効であること |
実行例
docker container attach my_container→ my_container のメインプロセスに接続。シェルがPID=1で動いていればそのまま操作可能。
exec と attach の違いまとめ
| 項目 | docker exec | docker container attach |
|---|---|---|
| 接続対象 | 新しいプロセス | 既存のメインプロセス(PID=1) |
| exit の挙動 | コンテナは停止しない | コンテナごと停止する |
| 利用シーン | 新しい作業や追加コマンドを動かす | 既存のメインプロセスにそのまま参加 |
| シェル不要性 | シェルがなくてもOK | シェルが動作していないと不可 |
実際の使い分け
- 新しい作業を始めたいとき → docker exec
→ 例えば、稼働中のWebサーバーコンテナに入り、設定ファイルを確認したいとき。 - メインのプロセスに直接接続したいとき → docker attach
→ 例えば、コンテナをシェル起動で立ち上げて、そのシェルに戻りたいとき。
まとめ
Dockerコンテナに接続する方法は exec と attach の2種類があります。
- exec は新しい作業用、exitしてもコンテナは動き続ける。
- attach はメインプロセスに直結、exitするとコンテナごと終了
この性質を理解して使い分けることで、コンテナ操作がぐっと効率的になります。
