docker exec
読む時間の目安: 2 分
説明
実行中のコンテナー内でコマンドを実行します。
利用方法
$ docker exec [オプション] CONTAINER COMMAND [ARG...]
追加説明
docker execコマンドを、実行中のコンテナー内において新たなコマンドを実行します。
docker execを使って指示されるコマンドは、コンテナーの主要プロセス(PID 1)が実行中である場合のみ実行されます。
そしてコンテナーが再起動された際には、再実行されません。
COMMAND はコンテナーのデフォルトディレクトリにおいて実行されます。 コンテナーの元になるイメージが、Dockerfile 内の WORKDIR ディレクティブの指定により、特定ディレクトリを指定している場合は、そのディレクトリにおいて実行されます。
COMMAND は実行可能である必要があり、連結されていたりクォートで囲まれていたりすると動作しません。
例としてdocker exec -ti my_container "echo a && echo b"は動作しませんが、docker exec -ti my_container sh -c "echo a && echo b"であれば動作します。
本コマンドの利用例については、以下に示す 利用例の節 を参照してください。
オプション
| 名前/省略形 | デフォルト | 説明 | 
| --detach,-d | デタッチモード。つまりコマンドをバックグラウンドで実行します。 | |
| --detach-keys | コンテナーデタッチ時のキーシーケンスをオーバーライドします。 | |
| --env,-e | API 1.25 以上 環境変数を設定します。 | |
| --env-file | API 1.25 以上 環境変数ファイルを読み込みます。 | |
| --interactive,-i | アタッチされていなくても STDIN は開放し続けます。 | |
| --privileged | コマンドに拡張権限を付与します。 | |
| --tty,-t | 擬似 TTY を割り当てます。 | |
| --user,-u | ユーザー名または UID。(記述書式t: <name|uid>[:<group|gid>]) | |
| --workdir,-w | API 1.35 以上 コンテナー内部のワーキングディレクトリ。 | 
利用例
実行中コンテナーでのdocker exec実行
はじめにコンテナーを起動させます。
$ docker run --name ubuntu_bash --rm -i -t ubuntu bash
上ではubuntu_bashという名のコンテナーが生成されて、Bash セッションが起動します。
次にそのコンテナー上においてコマンドを実行します。
$ docker exec -d ubuntu_bash touch /tmp/execWorks
これはバックグラウンドで実行中のコンテナーubuntu_bash内において、新規ファイル/tmp/execWorksを生成します。
次にそのコンテナー上において、対話形式のbashシェルを起動します。
$ docker exec -it ubuntu_bash bash
コンテナーubuntu_bash内において新たな Bash セッションを生成します。
次にカレントな Bash セッションにおいて環境変数を設定します。
$ docker exec -it -e VAR=1 ubuntu_bash bash
これはコンテナーubuntu_bash内に新たな Bash セッションを生成して、環境変数$VARに “1” を設定します。
なおこの環境変数は、カレントな Bash セッション内においてのみ有効です。
デフォルトにおいてdocker execコマンドは、コンテナーの生成時に設定されたワーキングディレクトリにおいて動作します。
$ docker exec -it ubuntu_bash pwd
/
コマンドを実行するワーキングディレクトリは変更することができます。
$ docker exec -it -w /root ubuntu_bash pwd
/root
停止中コンテナーでのdocker exec実行
コンテナーが停止中である場合にdocker execコマンドを実行すると、エラーが発生します。
$ docker pause test
test
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
1ae3b36715d2        ubuntu:latest       "bash"              17 seconds ago      Up 16 seconds (Paused)                       test
$ docker exec test ls
FATA[0000] Error response from daemon: Container test is paused, unpause the container before exec
$ echo $?
1
上位コマンド
| コマンド | 説明 | 
|---|---|
| docker | Docker CLI の基本コマンド |