從容器名稱獲取 Docker 容器 ID
一、概述
Docker是一種非常廣泛採用的容器化技術。各種應用程序可以在容器中運行。
雖然我們可以在啟動容器時控制容器的名稱,但 ID 是由 Docker 生成的。我們可能需要這個 ID 在 Docker 主機上執行某些操作,因此從容器名稱中找到容器的 ID 是一個非常常見的需求。
在這個簡短的教程中,我們將討論從名稱中查找容器 ID 的各種方法。
2. 建立一個例子
讓我們創建一些容器作為示例:
$ docker container run --rm --name web-server-1 -d nginx:alpine
$ docker container run --rm --name web-server-10 -d nginx:alpine
$ docker container run --rm --name web-server-11 -d nginx:alpine
現在,讓我們檢查這些容器是否已創建:
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80f1bc1e7feb nginx:alpine "/docker-entrypoint.…" 36 seconds ago Up 36 seconds 80/tcp web-server-11
acdea168264a nginx:alpine "/docker-entrypoint.…" 36 seconds ago Up 36 seconds 80/tcp web-server-10
0cbfc6c17009 nginx:alpine "/docker-entrypoint.…" 37 seconds ago Up 36 seconds 80/tcp web-server-1
如我們所見,使用nginx
鏡像,我們有三個處於running
狀態的容器。
3. 顯示短容器 ID
Docker 為每個容器分配一個唯一的 ID。完整的容器 ID 是 64 個字符的十六進製字符串。但是,在大多數情況下,此容器 ID 的簡短版本就足夠了。短容器 ID 表示完整容器 ID 的前 12 個字符。
讓我們使用 Docker 的container ls
child 命令顯示短容器 ID:
$ docker container ls --all --quiet --filter "name=web-server-10"
acdea168264a
在此示例中,我們使用了–filter
選項,它根據條件過濾輸出。在我們的例子中,過濾是在容器的名稱上完成的。
此外,我們還在命令中使用了–all
和–quiet
選項。 –all
選項是顯示所有容器所必需的,因為默認情況下,它只顯示正在運行的容器。 –quiet
選項僅用於顯示容器 ID。
我們還可以使用grep
和awk
命令的組合來顯示短容器 ID:
$ docker container ls --all | grep web-server-10 | awk '{print $1}'
acdea168264a
在這裡, awk
命令打印輸出的第一列,它表示短容器 ID。
我們應該注意, grep
和awk
命令可能並非在所有平台上都可用。因此這種方法的可移植性較差。
4. 顯示完整的容器 ID
在大多數情況下,一個簡短的容器 ID 就足夠了。但是,在極少數情況下,需要完整的容器 ID 以避免歧義。
我們可以使用 Docker 的container ls
child 命令來顯示完整的容器 ID:
$ docker container ls --all --quiet --no-trunc --filter "name=web-server-10"
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf
在這裡,我們在命令中使用了–no-trunc
選項。此選項覆蓋默認行為並禁用輸出截斷。
我們可以使用grep
和awk
命令的組合來獲得相同的結果:
$ docker container ls --all --no-trunc | grep web-server-10 | awk '{print $1}'
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf
Docker 的container inspect
子命令以 JSON 格式顯示有關容器的詳細信息。我們可以使用它來顯示容器 ID:
$ docker container inspect web-server-10 --format={{.Id}}
acdea168264a08f9aaca0dfc82ff3551418dfd22d02b713142a6843caa2f61bf
在此示例中,我們使用了–format
選項,該選項使用 Go 模板從 JSON 輸出中提取Id
字段。
5. 使用精確匹配顯示容器 ID
我們不能在所有場景中都使用基本的grep
或container ls
子命令。例如,如果容器名稱部分匹配,這種幼稚的方法將不起作用。讓我們看一個例子。
讓我們顯示web-server-1
容器的 ID:
$ docker container ls --all --quiet --filter "name=web-server-1"
80f1bc1e7feb
acdea168264a
0cbfc6c17009
在這裡,輸出顯示了三個容器 ID。發生這種情況是因為名稱web-server-1
部分匹配其他兩個容器 - web-server-10
和web-server-11
。為了避免這種情況,我們可以使用正則表達式。
現在,讓我們使用帶有容器名稱的正則表達式:
$ docker container ls --all --quiet --filter "name=^web-server-1$"
0cbfc6c17009
在此示例中,我們使用caret(^)
和dollar($)
符號來強制容器名稱完全匹配。
以類似的方式,我們可以在grep
命令中使用-w
選項來強制執行完全匹配:
$ docker container ls --all | grep -w web-server-1 | awk '{print $1}'
0cbfc6c17009
六,結論
在本文中,我們了解瞭如何使用名稱查找容器 ID。
首先,我們使用container
ls
child 命令以及grep
和 awk commands
的組合來顯示短容器 ID。
然後我們使用–no-trunc
選項和container inspect
child 命令來顯示完整的容器 ID。
最後,我們使用正則表達式來確保容器名稱完全匹配。