docker container exec

描述在執行中的容器內執行指令
使用方式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分配虛擬 TTY
-u, --user使用者名稱或 UID (格式: <名稱|uid>[:<群組|gid>])
-w, --workdirAPI 1.35+ 容器內的工作目錄

範例

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

首先,啟動一個容器。

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

這會從 alpine 映像檔建立並啟動一個名為 mycontainer 的容器,並以 sh shell 作為其主處理程序。-d 選項(--detach 的簡寫)將容器設定為在背景中以分離模式執行,並附加虛擬 TTY (-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
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.