docker exec

説明

実行中のコンテナ内でコマンドを実行します。

使い方

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

補足説明

docker exec コマンドは実行中のコンテナ内で、新しいコマンドを実行します。

docker exec コマンドが使えるのは、コンテナのプライマリ・プロセス( PID 1 として実行するプロセス)が実行中の時のみです。また、コンテナが再起動した場合は、こちらコマンドは再度実行されません。

コマンドは、コンテナ内のデフォルトディレクトリで実行します。元になるイメージが、 Dockerfile 内の WORKDIR 命令で任意のディレクトリを指定している場合、そちらで実行します。

コマンドは実行可能な状態である必要があり、連結するコマンドや、クォートしたコマンドは動作しません。例えば、 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

アタッチしていなくても、標準入力を開き続ける

--privileged

このコンテナに対して 拡張権限(extended privileged) を与える

--tty , -t

疑似(pseudo) TTY を割り当て

--user , -u

ユーザ名または UID (format: <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 セッションを開始し、環境変数 $VAR1 にしています。この環境変数が有効なのは、現在の Bash セッションのみという点に注意してください。

デフォルトの docker exec コマンドは、コンテナが作成時に設定された作業ディレクトリ内で実行します。

$ docker exec -it ubuntu_bash pwd
/

コマンドを実行するディレクトリを指定できます。

$ docker exec -it -w /root ubuntu_bash pwd
/root

一時停止中(pause) のコンテナで 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 の基本コマンド