Docker exec 命令的詳細使用

reggie發表於2021-07-15

在平時工作中,對於docker exec這個命令使用的還算多,在此寫份記錄。

簡介

為了在執行中的容器內執行命令,以前是需要在映象裡新增一個 SSH Server的,現在直接使用 docker exex 這個命令即可。

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

其中OPTIONS引數如下:

| 引數名 | 簡寫 | 描述 |
| :—–| —-: | —-: |
| –detach | -d | 分離模式:在後臺執行命令 |
| -detach-keys | | 重寫分離容器的鍵序列 |
| -env | -e | 設定環境變數 |
| –interactive | -i | 即使沒有連線,也要保持 STDIN 開啟 |
| –privileged | | 賦予命令擴充套件特權 |
| –tty | -t | 分配一個偽 tty |
| -user | -u | 使用者名稱或 UID |
| -workdir | -w | 指定容器內的工作目錄 |

需要注意的地方

  • 執行的command只會在容器預設的目錄中執行,如果基礎映象中有一個使用了 WORKDIR 指令自定義目錄,將會在這個目錄下執行。

  • command必須是一個可執行的命令,使用連結和引號的命令將不會被執行。舉個例子:

# 這個將不會被執行
docker exec -ti my_container "echo a && echo b"

# 這個可以執行
docker exec -ti my_container sh -c "echo a && echo b"

使用

我們使用 Ubuntu 映象為例子來做實驗。

首先拉取ubuntu映象

docker pull ubuntu

然後執行一個容器 命名為 ut

docker run -d --name ut -it ubuntu

對於 docker exec 的使用有3種模式。

1.基本模式

這種是在 docker cli 模式命令列下同步執行執行容器中的命令。

$ docker exec ut echo "hello world"
hello world

這個模式和 docker run 比較像了,可以透過指定容器的名字或者容器ID來執行。注意:後面執行的命令是容器內的命令,不是當前宿主機的命令。

2.後臺模式

這種是在後臺執行容器中的命令,沒有輸出返回,主要用來執行一些耗時的任務。比如一個耗時的指令碼之類

docker exec -d ut touch /tmp/test.txt

3.互動模式

這種主要是在容器上執行互動式 bash shell。會在容器中建立一個新的Bash會話。注意,這個環境變數只在當前的 Bash 會話中有效。

docker exec -it -e VAR=1 ut bash
root@7e535aff75ef:/# echo $VAR
1

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

[master~]docker exec -it ut pwd

/

你也可以選擇執行命令的工作目錄,比如下面這樣

[master~]docker exec -it -w /root ut pwd

/root
本作品採用《CC 協議》,轉載必須註明作者和本文連結
微信公眾號:碼咚沒 ( ID: codingdongmei )

相關文章