docker
| 描述 | Docker CLI 的基礎命令。 |
|---|
描述
根據您的 Docker 系統配置,您可能需要在每個 docker 命令前加上 sudo。為了避免在使用 docker 命令時必須使用 sudo,您的系統管理員可以建立一個名為 docker 的 Unix 群組並將使用者新增至其中。
有關安裝 Docker 或 sudo 配置的更多資訊,請參閱適用於您作業系統的安裝說明。
顯示說明文字
若要列出任何命令的說明,只需執行該命令,然後加上 --help 選項即可。
$ docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Create and run a new container from an image
Options:
--add-host value Add a custom host-to-IP mapping (host:ip) (default [])
-a, --attach value Attach to STDIN, STDOUT or STDERR (default [])
<...>
環境變數
以下列出的環境變數受 docker 命令列支援
| 變數 | 描述 |
|---|---|
DOCKER_API_VERSION | 覆寫協商的 API 版本,用於偵錯 (例如 1.19) |
DOCKER_CERT_PATH | 您的驗證金鑰位置。此變數由 docker CLI 和 dockerd 守護程式共同使用 |
DOCKER_CONFIG | 您的用戶端配置檔案位置。 |
DOCKER_CONTENT_TRUST_SERVER | 要使用的 Notary 伺服器 URL。預設與註冊中心使用相同的 URL。 |
DOCKER_CONTENT_TRUST | 設定後,Docker 會使用公證人來簽署和驗證映像。對於 build、create、pull、push、run,這等同於 --disable-content-trust=false。 |
DOCKER_CONTEXT | 要使用的 docker context 名稱 (會覆寫 DOCKER_HOST 環境變數以及使用 docker context use 設定的預設 context) |
DOCKER_CUSTOM_HEADERS | (實驗性功能) 配置用戶端傳送的自訂 HTTP 標頭。標頭必須以逗號分隔的 name=value 對列表提供。這等同於配置檔案中的 HttpHeaders 欄位。 |
DOCKER_DEFAULT_PLATFORM | 接受 --platform 旗標的命令的預設平台。 |
DOCKER_HIDE_LEGACY_COMMANDS | 設定後,Docker 會在 docker help 輸出中隱藏「舊版」頂層命令 (例如 docker rm 和 docker pull),只列印每個物件類型 (例如 docker container) 的「管理命令」。這在未來版本中可能會成為預設設定。 |
DOCKER_HOST | 要連線的守護程式通訊端。 |
DOCKER_TLS | 為 docker CLI 建立的連線啟用 TLS (等同於 --tls 命令列選項)。設定為非空值以啟用 TLS。請注意,如果設定了任何其他 TLS 選項,TLS 會自動啟用。 |
DOCKER_TLS_VERIFY | 設定後,Docker 會使用 TLS 並驗證遠端。此變數由 docker CLI 和 dockerd 守護程式共同使用 |
BUILDKIT_PROGRESS | 當使用 BuildKit 後端建置時,設定進度輸出的類型 (auto、plain、tty、rawjson)。使用 plain 顯示容器輸出 (預設為 auto)。 |
由於 Docker 是使用 Go 開發的,您也可以使用 Go 執行階段所使用的任何環境變數。特別是,您可能會發現以下變數很有用
| 變數 | 描述 |
|---|---|
HTTP_PROXY | HTTP 請求的代理 URL,除非被 NoProxy 覆寫。 |
HTTPS_PROXY | HTTPS 請求的代理 URL,除非被 NoProxy 覆寫。 |
NO_PROXY | 逗號分隔的值,指定應從代理中排除的主機。 |
有關這些變數的詳細資訊,請參閱 Go 規範。
選項類型
單字元命令列選項可以組合使用,因此您可以寫成 docker run -it --name test busybox sh,而不是輸入 docker run -i -t --name test busybox sh。
布林值
布林選項的形式為 -d=false。您在說明文字中看到的值是預設值,如果您**未**指定該旗標,則會設定此預設值。如果您指定布林旗標而未提供值,則不論預設值為何,該旗標都將設定為 true。
例如,執行 docker run -d 會將值設定為 true,因此您的容器**將會**在「分離」模式下於背景執行。
預設為 true 的選項 (例如 docker build --rm=true) 只能透過明確將其設定為 false 來設定為非預設值
$ docker build --rm=false .
多重
您可以在單一命令列中多次指定類似 -a=[] 的選項,例如在這些命令中
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash
$ docker run -a stdin -a stdout -a stderr ubuntu /bin/ls
有時,多個選項可能需要更複雜的值字串,例如 -v 的情況
$ docker run -v /host:/container example/mysql
注意由於
pty實作的限制,請勿同時使用-t和-a stderr選項。在pty模式下,所有stderr都會直接導向stdout。
字串和整數
諸如 --name="" 之類的選項需要一個字串,且只能指定一次。諸如 -c=0 之類的選項需要一個整數,且只能指定一次。
配置檔案
依預設,Docker 命令列將其配置檔案儲存在 $HOME 目錄中名為 .docker 的目錄內。
Docker 管理配置目錄中的大部分檔案,您不應修改它們。但是,您可以修改 config.json 檔案來控制 docker 命令的某些行為。
您可以使用環境變數或命令列選項來修改 docker 命令的行為。您也可以使用 config.json 中的選項來修改部分相同的行為。如果同時設定了環境變數和 --config 旗標,則旗標優先於環境變數。命令列選項會覆寫環境變數,而環境變數會覆寫您在 config.json 檔案中指定的屬性。
變更 .docker 目錄
若要指定不同的目錄,請使用 DOCKER_CONFIG 環境變數或 --config 命令列選項。如果兩者都指定,則 --config 選項會覆寫 DOCKER_CONFIG 環境變數。以下範例使用位於 ~/testconfigs/ 目錄中的 config.json 檔案來覆寫 docker ps 命令。
$ docker --config ~/testconfigs/ ps
此旗標僅適用於正在執行的命令。對於持久性配置,您可以在您的 shell (例如 ~/.profile 或 ~/.bashrc) 中設定 DOCKER_CONFIG 環境變數。以下範例將新目錄設定為 HOME/newdir/.docker。
$ echo export DOCKER_CONFIG=$HOME/newdir/.docker > ~/.profile
Docker CLI 配置檔案 (config.json) 屬性
使用 Docker CLI 配置來自訂 docker CLI 的設定。配置檔案使用 JSON 格式,且屬性
依預設,配置檔案儲存在 ~/.docker/config.json。請參閱變更 .docker 目錄部分以使用不同的位置。
警告配置檔案和
~/.docker配置目錄內的其他檔案可能包含敏感資訊,例如代理的驗證資訊,或者根據您的憑證儲存庫,您的映像註冊中心憑證。在與他人分享之前,請審查您的配置檔案內容,並避免將檔案提交到版本控制。
自訂命令的預設輸出格式
如果未提供 --format 旗標,這些欄位可讓您自訂某些命令的預設輸出格式。
| 屬性 | 描述 |
|---|---|
configFormat | 自訂 docker config ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker config ls。 |
imagesFormat | 自訂 docker images / docker image ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker images。 |
networksFormat | 自訂 docker network ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker network ls。 |
nodesFormat | 自訂 docker node ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker node ls。 |
pluginsFormat | 自訂 docker plugin ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker plugin ls。 |
psFormat | 自訂 docker ps / docker container ps 輸出的預設格式。有關支援的格式指令列表,請參閱 docker ps。 |
secretFormat | 自訂 docker secret ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker secret ls。 |
serviceInspectFormat | 自訂 docker service inspect 輸出的預設格式。有關支援的格式指令列表,請參閱 docker service inspect。 |
servicesFormat | 自訂 docker service ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker service ls。 |
statsFormat | 自訂 docker stats 輸出的預設格式。有關支援的格式指令列表,請參閱 docker stats。 |
tasksFormat | 自訂 docker stack ps 輸出的預設格式。有關支援的格式指令列表,請參閱 docker stack ps。 |
volumesFormat | 自訂 docker volume ls 輸出的預設格式。有關支援的格式指令列表,請參閱 docker volume ls。 |
自訂 HTTP 標頭
屬性 HttpHeaders 指定了一組要在從 Docker 用戶端傳送至守護程式的所有訊息中包含的標頭。Docker 不會嘗試解釋或理解這些標頭;它只是將它們放入訊息中。Docker 不允許這些標頭更改其為自己設定的任何標頭。
或者,可以使用 DOCKER_CUSTOM_HEADERS 環境變數,該變數在 v27.1 及更高版本中可用。此環境變數是實驗性的,其確切行為可能會改變。
憑證儲存選項
屬性 credsStore 指定一個外部二進位檔作為預設憑證儲存庫。設定此屬性後,docker login 將嘗試將憑證儲存在 $PATH 中可見的 docker-credential-<value> 所指定的二進位檔中。如果未設定此屬性,憑證將儲存在 CLI 配置檔案的 auths 屬性中。有關更多資訊,請參閱 docker login 文件中的**憑證儲存庫**部分
屬性 credHelpers 指定了一組憑證助手,在為特定註冊中心儲存和檢索憑證時,優先使用這些助手而不是 credsStore 或 auths。如果設定此屬性,則在為特定註冊中心儲存或檢索憑證時將使用二進位檔 docker-credential-<value>。有關更多資訊,請參閱 docker login 文件中的**憑證助手**部分
容器的自動代理配置
屬性 proxies 指定要自動設定在容器上的代理環境變數,並在 docker build 期間作為 --build-arg 設定在容器上。可以配置一組「預設」代理,並將用於用戶端連線到的任何 Docker 守護程式,或每個主機 (Docker 守護程式) 的配置,例如 https://docker-daemon1.example.com。以下屬性可以為每個環境設定
| 屬性 | 描述 |
|---|---|
httpProxy | 容器的 HTTP_PROXY 和 http_proxy 的預設值,以及 docker build 上的 --build-arg。 |
httpsProxy | 容器的 HTTPS_PROXY 和 https_proxy 的預設值,以及 docker build 上的 --build-arg。 |
ftpProxy | 容器的 FTP_PROXY 和 ftp_proxy 的預設值,以及 docker build 上的 --build-arg。 |
noProxy | 容器的 NO_PROXY 和 no_proxy 的預設值,以及 docker build 上的 --build-arg。 |
allProxy | 容器的 ALL_PROXY 和 all_proxy 的預設值,以及 docker build 上的 --build-arg。 |
這些設定僅用於配置容器的代理設定,不作為 docker CLI 或 dockerd 守護程式的代理設定。有關配置 CLI 和守護程式的代理設定,請參閱環境變數和HTTP/HTTPS 代理部分。
警告代理設定可能包含敏感資訊 (例如,如果代理需要驗證)。環境變數以純文字形式儲存在容器的配置中,因此可以透過遠端 API 進行檢查,或者在使用
docker commit時提交到映像。
從容器分離的預設按鍵序列
一旦連接到容器,使用者可以使用 CTRL-p CTRL-q 按鍵序列從中分離並使其保持執行。這個分離按鍵序列可以使用 detachKeys 屬性進行自訂。為該屬性指定一個 <sequence> 值。<sequence> 的格式是一個逗號分隔的列表,可以是字母 [a-Z],或 ctrl- 加上以下任何一個按鍵
a-z(單個小寫英文字元 )@(at 符號)[(左方括號)\\(兩個反斜線)_(底線)^(插入符號)
您的自訂設定會套用至所有透過 Docker 用戶端啟動的容器。使用者可以針對每個容器覆寫您的自訂或預設按鍵序列。為此,使用者需在 docker attach、docker exec、docker run 或 docker start 命令中指定 --detach-keys 旗標。
CLI 外掛程式選項
屬性 plugins 包含 CLI 外掛程式的特定設定。鍵為外掛程式名稱,而值是選項的進一步對應,這些選項是該外掛程式特有的。
配置檔案範例
以下是一個 config.json 範例檔案,用於說明各種欄位所使用的格式
{
"HttpHeaders": {
"MyHeader": "MyValue"
},
"psFormat": "table {{.ID}}\\t{{.Image}}\\t{{.Command}}\\t{{.Labels}}",
"imagesFormat": "table {{.ID}}\\t{{.Repository}}\\t{{.Tag}}\\t{{.CreatedAt}}",
"pluginsFormat": "table {{.ID}}\t{{.Name}}\t{{.Enabled}}",
"statsFormat": "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}",
"servicesFormat": "table {{.ID}}\t{{.Name}}\t{{.Mode}}",
"secretFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
"configFormat": "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}",
"serviceInspectFormat": "pretty",
"nodesFormat": "table {{.ID}}\t{{.Hostname}}\t{{.Availability}}",
"detachKeys": "ctrl-e,e",
"credsStore": "secretservice",
"credHelpers": {
"awesomereg.example.org": "hip-star",
"unicorn.example.com": "vcbait"
},
"plugins": {
"plugin1": {
"option": "value"
},
"plugin2": {
"anotheroption": "anothervalue",
"athirdoption": "athirdvalue"
}
},
"proxies": {
"default": {
"httpProxy": "http://user:pass@example.com:3128",
"httpsProxy": "https://my-proxy.example.com:3129",
"noProxy": "intra.mycorp.example.com",
"ftpProxy": "http://user:pass@example.com:3128",
"allProxy": "socks://example.com:1234"
},
"https://manager1.mycorp.example.com:2377": {
"httpProxy": "http://user:pass@example.com:3128",
"httpsProxy": "https://my-proxy.example.com:3129"
}
}
}實驗性功能
實驗性功能提供對未來產品功能的搶先體驗。這些功能旨在用於測試和回饋,它們可能會在發行版本之間無預警地更改,或者從未來的發行版本中移除。
從 Docker 20.10 開始,實驗性 CLI 功能預設啟用,無需配置即可啟用。
公證人
如果您使用自己的公證人伺服器以及自簽憑證或內部憑證頒發機構,您需要將憑證放置在 Docker 配置目錄中的 tls/<registry_url>/ca.crt 位置。
或者,您可以透過將憑證新增至系統的根憑證頒發機構清單來全域信任它。
選項
| 選項 | 預設值 | 描述 |
|---|---|---|
--config | /root/.docker | 用戶端配置檔案的位置 |
-c, --context | 用於連接守護程式的上下文名稱 (覆寫 DOCKER_HOST 環境變數以及使用 docker context use 設定的預設上下文) | |
-D, --debug | 啟用偵錯模式 | |
-H, --host | 要連接的守護程式通訊端 | |
-l, --log-level | info | 設定日誌級別 (debug、info、warn、error、fatal) |
--tls | 使用 TLS;由 --tlsverify 隱含 | |
--tlscacert | /root/.docker/ca.pem | 僅信任由此 CA 簽署的憑證 |
--tlscert | /root/.docker/cert.pem | TLS 憑證檔案的路徑 |
--tlskey | /root/.docker/key.pem | TLS 金鑰檔案的路徑 |
--tlsverify | 使用 TLS 並驗證遠端 |
範例
指定守護程式主機 (-H, --host)
當您呼叫 docker 命令時,可以使用 -H、--host 旗標來指定要使用的通訊端。您可以使用以下協定
| 方案 | 描述 | 範例 |
|---|---|---|
unix://[<路徑>] | Unix 通訊端 (僅限 Linux) | unix:///var/run/docker.sock |
tcp://[<IP 或主機>[:連接埠]] | TCP 連線 | tcp://174.17.0.1:2376 |
ssh://[使用者名稱@]<IP 或主機>[:連接埠] | SSH 連線 | ssh://user@192.168.64.5 |
npipe://[<名稱>] | 命名管道 (僅限 Windows) | npipe:////./pipe/docker_engine |
如果您未指定 -H 旗標,且未使用自訂上下文,命令會使用以下預設通訊端
- 在 macOS 和 Linux 上為
unix:///var/run/docker.sock - 在 Windows 上為
npipe:////./pipe/docker_engine
若要達到類似的效果,而無需為每個命令指定 -H 旗標,您也可以建立一個上下文,或者,使用DOCKER_HOST 環境變數。
有關 -H 旗標的更多資訊,請參閱守護程式通訊端選項。
使用 TCP 通訊端
以下範例展示如何透過 TCP 呼叫 docker ps,連線到 IP 位址為 174.17.0.1 且監聽連接埠 2376 的遠端守護程式
$ docker -H tcp://174.17.0.1:2376 ps
注意依照慣例,Docker 守護程式使用連接埠
2376進行安全的 TLS 連線,而使用連接埠2375進行不安全的非 TLS 連線。
使用 SSH 通訊端
當您使用 SSH 在遠端守護程式上呼叫命令時,請求會轉發到 SSH 主機上的 /var/run/docker.sock Unix 通訊端。
$ docker -H ssh://user@192.168.64.5 ps
您可以選擇性地透過在 SSH 位址末尾附加路徑組件來指定通訊端的位置。
$ docker -H ssh://user@192.168.64.5/var/run/docker.sock ps
子命令
| 指令 | 描述 |
|---|---|
docker build (舊版建置器) | 從 Dockerfile 建置映像 |
docker builder | 管理建置 |
docker buildx | Docker Buildx |
docker checkpoint | 管理檢查點 |
docker compose | Docker Compose |
docker config | 管理 Swarm 配置 |
docker container | 管理容器 |
docker context | 管理上下文 |
docker debug | 進入任何容器或映像的 shell。docker exec 偵錯的替代方案。 |
docker desktop (Beta) | Docker Desktop |
docker image | 管理映像 |
docker init | 為您的專案建立 Docker 相關的入門檔案 |
docker inspect | 傳回 Docker 物件的低階資訊 |
docker login | 向註冊中心驗證 |
docker logout | 從註冊中心登出 |
docker manifest | 管理 Docker 映像清單和清單列表 |
docker mcp | |
docker model | Docker 模型執行器 |
docker network | 管理網路 |
docker node | 管理 Swarm 節點 |
docker offload | 從 CLI 控制 Docker 卸載 |
docker plugin | 管理外掛程式 |
docker scout | Docker Scout 的命令列工具 |
docker search | 在 Docker Hub 搜尋映像 |
docker secret | 管理 Swarm 密碼 |
docker service | 管理 Swarm 服務 |
docker stack | 管理 Swarm 堆疊 |
docker swarm | 管理 Swarm |
docker system | 管理 Docker |
docker trust | 管理 Docker 映像信任 |
docker version | 顯示 Docker 版本資訊 |
docker volume | 管理磁碟區 |