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, --env | API 1.25+ 設定環境變數 | |
--env-file | API 1.25+ 讀取包含環境變數的檔案 | |
-i, --interactive | 即使未附加,也保持 STDIN 開啟 | |
--privileged | 賦予命令擴充套件許可權 | |
-t, --tty | 分配一個偽終端 (pseudo-TTY) | |
-u, --user | 使用者名稱或 UID (格式:<name|uid>[:<group|gid>] ) | |
-w, --workdir | API 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)
為 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