🙆♀️
docker attach VS exec
attach
- 既に実行中のコンテナに接続するために使用されます。
- コンテナのメインプロセス(PID 1)に接続します。通常、このプロセスはコンテナの起動時に指定されたコマンドです。(docker psの結果に出たCOMMANDのプロセスがメインプロセスになる。)
- コンテナの標準入力、出力、エラーにアクセスできます。
- コンテナのメインプロセスに直接アタッチするので、そのプロセスが終了すると、attachセッションも終了します。
- ユースケースとしては、コンテナのメインプロセスの出力を観察するのに適しています。
command
- docker attach {docker ID}
exec
- 実行中のコンテナ内で新しいプロセスを実行するために使用されます。
- 新しいプロセスをコンテナ内で実行し、そのプロセスに対するシェルやコマンドラインインターフェイスを提供します。
- コンテナ内で任意のコマンドを実行できます。例えば、bashシェルを開いたり、特定のサービスの設定を変更したりできます。
- コンテナのメインプロセスとは独立しており、execで開始されたプロセスが終了しても、コンテナは停止しません。
- ユースケースとしては、コンテナ内でのデバッグや設定変更、環境の検査などに適しています。
command
- docker exec -it {docker ID} bash
- -i : --interactive Keep STDIN open even if not attached
- -t : Allocate a pseudo-TTY
Discussion