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 rmdocker pull),只列印每個物件類型 (例如 docker container) 的「管理命令」。這在未來版本中可能會成為預設設定。
DOCKER_HOST要連線的守護程式通訊端。
DOCKER_TLSdocker CLI 建立的連線啟用 TLS (等同於 --tls 命令列選項)。設定為非空值以啟用 TLS。請注意,如果設定了任何其他 TLS 選項,TLS 會自動啟用。
DOCKER_TLS_VERIFY設定後,Docker 會使用 TLS 並驗證遠端。此變數由 docker CLI 和 dockerd 守護程式共同使用
BUILDKIT_PROGRESS當使用 BuildKit 後端建置時,設定進度輸出的類型 (autoplainttyrawjson)。使用 plain 顯示容器輸出 (預設為 auto)。

由於 Docker 是使用 Go 開發的,您也可以使用 Go 執行階段所使用的任何環境變數。特別是,您可能會發現以下變數很有用

變數描述
HTTP_PROXYHTTP 請求的代理 URL,除非被 NoProxy 覆寫。
HTTPS_PROXYHTTPS 請求的代理 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 指定了一組憑證助手,在為特定註冊中心儲存和檢索憑證時,優先使用這些助手而不是 credsStoreauths。如果設定此屬性,則在為特定註冊中心儲存或檢索憑證時將使用二進位檔 docker-credential-<value>。有關更多資訊,請參閱 docker login 文件中的**憑證助手**部分

容器的自動代理配置

屬性 proxies 指定要自動設定在容器上的代理環境變數,並在 docker build 期間作為 --build-arg 設定在容器上。可以配置一組「預設」代理,並將用於用戶端連線到的任何 Docker 守護程式,或每個主機 (Docker 守護程式) 的配置,例如 https://docker-daemon1.example.com。以下屬性可以為每個環境設定

屬性描述
httpProxy容器的 HTTP_PROXYhttp_proxy 的預設值,以及 docker build 上的 --build-arg
httpsProxy容器的 HTTPS_PROXYhttps_proxy 的預設值,以及 docker build 上的 --build-arg
ftpProxy容器的 FTP_PROXYftp_proxy 的預設值,以及 docker build 上的 --build-arg
noProxy容器的 NO_PROXYno_proxy 的預設值,以及 docker build 上的 --build-arg
allProxy容器的 ALL_PROXYall_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 attachdocker execdocker rundocker 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-levelinfo設定日誌級別 (debuginfowarnerrorfatal)
--tls使用 TLS;由 --tlsverify 隱含
--tlscacert/root/.docker/ca.pem僅信任由此 CA 簽署的憑證
--tlscert/root/.docker/cert.pemTLS 憑證檔案的路徑
--tlskey/root/.docker/key.pemTLS 金鑰檔案的路徑
--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 buildxDocker Buildx
docker checkpoint管理檢查點
docker composeDocker 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 modelDocker 模型執行器
docker network管理網路
docker node管理 Swarm 節點
docker offload從 CLI 控制 Docker 卸載
docker plugin管理外掛程式
docker scoutDocker 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管理磁碟區
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.