docker container exec(在 Docker 容器中執行指令)

說明在正在執行的容器中執行指令
用法docker container exec [選項] 容器 指令 [參數...]
別名
docker exec

介紹 Docker Debug

要輕鬆取得任何容器的除錯 shell,請使用 `docker debug`。 Docker Debug 取代了使用 `docker exec` 進行除錯。使用它,您可以在任何容器或映像檔中取得 shell,即使是精簡的容器或映像檔,也無需修改。此外,您還可以在其可自訂的工具箱中攜帶您最喜歡的除錯工具。

立即探索 Docker Debug

說明

`docker exec` 指令會在正在執行的容器中執行新的指令。

您使用 `docker exec` 指定的指令僅在容器的主要處理程序(`PID 1`)執行時執行,如果容器重新啟動,則不會重新啟動該指令。

指令會在容器的預設工作目錄中執行。

指令必須是可執行的。鍊式指令或引號括住的指令無法運作。

  • 可以這樣用:`docker exec -it my_container sh -c "echo a && echo b"`
  • 不能這樣用:`docker exec -it my_container "echo a && echo b"`

選項

選項預設值說明
-d, --detach分離模式:在背景執行指令
--detach-keys覆寫分離容器的按鍵順序
-e, --envAPI 1.25 以上版本 設定環境變數
--env-fileAPI 1.25 以上版本 讀取環境變數檔案
-i, --interactive即使未附加,也要保持 STDIN 開啟
--privileged(賦予權限)賦予指令擴充權限
-t, --tty配置一個偽終端 (pseudo-TTY)
-u, --user使用者名稱或 UID(格式:<name|uid>[:<group|gid>]
-w, --workdirAPI 1.35+ 容器內的工作目錄

範例

在正在執行的容器上執行 docker exec

首先,啟動一個容器。

$ docker run --name mycontainer -d -i -t alpine /bin/sh

這會從 alpine 映像檔建立並啟動一個名為 mycontainer 的容器,並以 sh shell 作為其主要程序。-d 選項(--detach 的縮寫)設定容器在背景以分離模式執行,並附加一個偽終端 (-t)。設定 -i 選項以保持 STDIN 附加 (-i),這可以防止 sh 程序立即退出。

接下來,在容器上執行指令。

$ docker exec -d mycontainer touch /tmp/execWorks

這會在正在執行的容器 mycontainer 內建立一個新的檔案 /tmp/execWorks,並在背景執行。

接下來,在容器上執行一個互動式 sh shell。

$ docker exec -it mycontainer sh

這會在容器 mycontainer 中啟動一個新的 shell 工作階段。

設定 exec 程序的環境變數(--env, -e)

接下來,在目前的 bash 工作階段中設定環境變數。

docker exec 指令會繼承在建立容器時設定的環境變數。使用 --env(或縮寫 -e)來覆寫全域環境變數,或為 docker exec 啟動的程序設定額外的環境變數。

以下範例會在容器 mycontainer 中建立一個新的 shell 工作階段,並將環境變數 $VAR_A 設定為 1,將 $VAR_B 設定為 2。這些環境變數僅對該 docker exec 指令啟動的 sh 程序有效,且其他在容器內執行的程序無法使用。

$ docker exec -e VAR_A=1 -e VAR_B=2 mycontainer env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=f64a4851eb71
VAR_A=1
VAR_B=2
HOME=/root

提升容器權限(--privileged)

請參閱 docker run --privileged

設定 exec 程序的工作目錄(--workdir, -w)

預設情況下,docker exec 指令會在建立容器時設定的相同工作目錄中執行。

$ docker exec -it mycontainer pwd
/

您可以使用 --workdir 選項(或縮寫 -w)為要執行的指令指定其他工作目錄。

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

嘗試在暫停的容器上執行 docker exec

如果容器已暫停,則 docker exec 指令會失敗並顯示錯誤訊息。

$ docker pause mycontainer
mycontainer

$ docker ps

CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS                   PORTS     NAMES
482efdf39fac   alpine    "/bin/sh"   17 seconds ago   Up 16 seconds (Paused)             mycontainer

$ docker exec mycontainer sh

Error response from daemon: Container mycontainer is paused, unpause the container before exec

$ echo $?
1