docker container exec

描述在執行中的容器中執行命令
用法docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
別名
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(格式:<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 的簡寫)將容器設定為在後臺以分離模式執行,並附加一個偽 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