下記2つの方法があります。
- docker attachを使用する方法
- docker execを使用する方法
docker attachを使用する方法
コンテナのシェル(PID1)のプロセスの標準入出力(STDIN/STDOUT)に接続(attach)します。コンテナ内でシェルが起動していないと接続できません。
1 |
docker attach [コンテナ名 or コンテナID] |
注意点
コンテナでデーモンを起動していた場合
コンテナでデーモンを起動していた場合はデーモンの標準入出力に接続されてしまうので注意が必要です。
exitで抜ける場合
exitで抜けた場合にPID1のプロセスが終了してコンテナも終了してしまいます。「Ctrl + p → Ctrl + q」と連続して入力して終了させるようにしましょう。(ただ、Ctrl + pqはコンテナ起動時に-itオプションをつけていない場合は使えないので注意です。)
使うための手順
下記コマンドを使用してコンテナを起動します。
1 |
docker run --name コンテナ名 -it -d イメージ名 /bin/bash |
docker execを使用する方法
コンテナ内で任意のコマンドを実行するためのコマンドです。
1 |
docker exec -it [コンテナ名 or コンテナID] /bin/bash |
-itを使用すれば立ち上がったシェルの標準入出力に接続できます。
接続状態から抜けるには
exitを使います。docker attachと違いコンテナが停止することがないので誤って停止させてしまうことがなくなります。
execした際に実行された「/bin/bash」のプロセスが終了するだけなのでコンテナ自体は停止をしないです。attachのようにコンテナ内で起動しているシェルに直接接続するわけではないというのが味噌です。
-itオプション
この組み合わせのオプションでシェルをすぐに終了させずに双方向にやり取りする形で実行させる手法があります。
-i
コンテナの標準入力(stdin)を取得して双方向に接続できるようにするものです。
-t
コンテナ内にTTYを割り当てるという意味があります。
どちらを使うべきか?
ローカル環境であれば特にどちらを選択しても問題ありません。使いやすい方を選びましょう。
ただ、もしチームで同じコンテナ環境を使っているようであればコンテナが停止するリスクがあるattachよりもexecを使うようにしましょう。
この記事へのコメントはありません。