はじめに
docker exec は、実行中のコンテナ内でコマンドを実行できる便利なコマンドです。
コンテナのシェルに入ったり、特定のスクリプトを実行したりする際に役立ちます。
コンテナを再起動せずにデバッグや設定変更ができるため、開発や運用の効率が向上します。
本記事では、docker exec の基本的な使い方やオプションについて解説します。
書こうと思ったきっかけ
Docker を使用していると、実行中のコンテナ内でコマンドを実行したい場面が多々あります。
例えば、ログを確認したり、設定ファイルを編集したりする際に、簡単にコンテナへアクセスできる方法が必要です。
docker exec はそのような場面で役立つため、基本的な使い方をまとめることにしました。
Docker exec とは?
docker exec コマンドは、すでに実行中のコンテナ内でコマンドを実行するためのコマンドです。
コンテナのシェルに入る、特定のスクリプトを実行するなどの用途で使用されます。
このコマンドを利用することで、コンテナを再起動せずに設定の変更やデバッグを行うことができます。
基本構文
docker exec [オプション] コンテナ名(またはID) コマンド
よく使うオプション
| オプション | 説明 | 
|---|---|
| -it | インタラクティブモード(標準入力を開く + TTYを有効化) | 
| -d | デタッチモード(バックグラウンド実行) | 
| -u ユーザー名 | 特定のユーザーで実行する | 
使用例
1. コンテナ内のシェルに入る
docker exec -it my_container /bin/sh
実際のコマンド画面
または、コンテナがUbuntuやDebianベースなら
docker exec -it my_container /bin/bash
実際のコマンド画面
→ my_container のシェルを開き、対話的に操作できるようになります。
2. コンテナ内で特定のコマンドを実行
docker exec my_container ls -l
実際のコマンド画面
→ my_container 内で ls -l を実行し、結果をホスト側に出力します。
3. コンテナ内のファイルを確認
docker exec my_container cat /etc/os-release
実際のコマンド画面
→ my_container 内の /etc/os-release を表示し、OSの情報を確認できます。
4. root ユーザーでコマンドを実行
docker exec -u root -it my_container bash
実際のコマンド画面
→ root権限でコンテナ内のシェルを開きます。
5. バックグラウンドで実行
docker exec -d my_container touch /tmp/testfile
→ my_container 内で /tmp/testfile を作成し、バックグラウンドで実行。
6. 環境変数を設定してコマンドを実行
docker exec -e MY_VAR=value my_container env
→ MY_VAR=value を環境変数として設定し、コンテナ内で env コマンドを実行。
注意点
- 
コンテナが起動している必要がある 
 docker execは すでに実行中のコンテナ に対してコマンドを実行するため、停止中のコンテナには使えません。停止中のコンテナに対して実行したい場合は、docker startで起動する必要があります。
- 
対話型シェルを開く場合は -itを忘れずに
 -itをつけないと、シェルの入力がうまく動作しないことがあります。
- 
コンテナの ENTRYPOINTやCMDに影響を与えない
 docker execで実行したコマンドは、コンテナのENTRYPOINTやCMDとは無関係に動作します。
関連コマンド
| コマンド | 用途 | 
|---|---|
| docker ps | 実行中のコンテナ一覧を表示 | 
| docker inspect <コンテナ名> | コンテナの詳細情報を取得 | 
| docker logs <コンテナ名> | コンテナのログを表示 | 
| docker attach <コンテナ名> | 実行中のコンテナにアタッチ | 
| docker start <コンテナ名> | 停止しているコンテナを起動 | 
| docker stop <コンテナ名> | コンテナを停止 | 
まとめ
- 
docker execは実行中のコンテナ内でコマンドを実行するために使う
- 
-itオプションを付けると、対話的にシェルを操作できる
- 
-u rootで特定のユーザーとして実行可能
- 
-eオプションを使うと環境変数を指定できる
- コンテナが起動中でないと使えない
実際に試して、コンテナの操作をスムーズに行いましょう!






