Docker超入門:exec と attach を使い分ける!Dockerコンテナ接続の基本

 Dockerを使っていて「コンテナに接続したい!」と思ったときに登場するのが docker execdocker 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 execdocker container attach
接続対象新しいプロセス既存のメインプロセス(PID=1)
exit の挙動コンテナは停止しないコンテナごと停止する
利用シーン新しい作業や追加コマンドを動かす既存のメインプロセスにそのまま参加
シェル不要性シェルがなくてもOKシェルが動作していないと不可

実際の使い分け

  • 新しい作業を始めたいときdocker exec
    → 例えば、稼働中のWebサーバーコンテナに入り、設定ファイルを確認したいとき。
  • メインのプロセスに直接接続したいときdocker attach
    → 例えば、コンテナをシェル起動で立ち上げて、そのシェルに戻りたいとき。

まとめ

Dockerコンテナに接続する方法は execattach の2種類があります。

  • exec は新しい作業用、exitしてもコンテナは動き続ける。
  • attach はメインプロセスに直結、exitするとコンテナごと終了

この性質を理解して使い分けることで、コンテナ操作がぐっと効率的になります。