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分配一個偽終端 (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

這會建立一個名為 mycontainer 的容器,使用 alpine 映象,以 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