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 の基本コマンド