docker exec¶
補足説明¶
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"
は動作します。
コマンドの使用例は、以下の 使用例のセクション をご覧ください。
オプション¶
名前, 省略形 |
デフォルト |
説明 |
---|---|---|
|
デタッチド・モード:バックグラウンドでコマンドを実行 |
|
|
コンテナをデタッチするキー手順を上書き |
|
|
【API 1.25+】環境変数を指定 |
|
|
【API 1.25+】環境変数のファイルを読み込む |
|
|
アタッチしていなくても、標準入力を開き続ける |
|
|
このコンテナに対して |
|
|
||
|
ユーザ名または UID (format: <name|uid>[:<group|gid>]) |
|
|
【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