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要使用的公證伺服器的 URL。預設為與登錄檔相同的 URL。
DOCKER_CONTENT_TRUST當設定時,Docker 使用公證服務來簽署和驗證映象。等同於構建、建立、拉取、推送、執行的 --disable-content-trust=false
DOCKER_CONTEXT要使用的 docker context 名稱(覆蓋 DOCKER_HOST 環境變數和使用 docker context use 設定的預設上下文)
DOCKER_CUSTOM_HEADERS(實驗性)配置客戶端傳送的自定義 HTTP 頭。頭必須以逗號分隔的 name=value 對列表形式提供。這等同於配置檔案中的 HttpHeaders 欄位。
DOCKER_DEFAULT_PLATFORM接受 --platform 標誌的命令的預設平臺。
DOCKER_HIDE_LEGACY_COMMANDS當設定時,Docker 在 docker help 輸出中隱藏“傳統”頂級命令(例如 docker rmdocker pull),並且只打印每個物件型別的 Management commands(例如 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_PROXY除非被 NoProxy 覆蓋,否則用於 HTTP 請求的代理 URL。
HTTPS_PROXY除非被 NoProxy 覆蓋,否則用於 HTTPS 請求的代理 URL。
NO_PROXY逗號分隔的值,指定應從代理中排除的主機。

有關這些變數的詳細資訊,請參閱 Go 規範

選項型別

單字元命令列選項可以組合,所以與其輸入 docker run -i -t --name test busybox sh,不如寫成 docker run -it --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 中設定 DOCKER_CONFIG 環境變數(例如 ~/.profile~/.bashrc)。以下示例將新目錄設定為 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 標誌,這些欄位允許您自定義某些命令的預設輸出格式。

屬性描述
configFormatdocker config ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker config ls
imagesFormatdocker images / docker image ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker images
networksFormatdocker network ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker network ls
nodesFormatdocker node ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker node ls
pluginsFormatdocker plugin ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker plugin ls
psFormatdocker ps / docker container ps 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker ps
secretFormatdocker secret ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker secret ls
serviceInspectFormatdocker service inspect 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker service inspect
servicesFormatdocker service ls 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker service ls
statsFormatdocker stats 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker stats
tasksFormatdocker stack ps 輸出的自定義預設格式。有關支援的格式化指令列表,請參閱 docker stack ps
volumesFormatdocker 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。可以配置一組 "default" 代理,並將其用於客戶端連線到的任何 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-level資訊設定日誌級別(debuginfowarnerrorfatal
--tls使用 TLS;由 --tlsverify 暗示
--tlscacert/root/.docker/ca.pem僅信任由該 CA 簽名的證書
--tlscert/root/.docker/cert.pemTLS 證書檔案路徑
--tlskey/root/.docker/key.pemTLS 金鑰檔案路徑
--tlsverify使用 TLS 並驗證遠端

示例

指定守護程序主機 (-H, --host)

您可以使用 -H--host 標誌來指定在呼叫 docker 命令時要使用的套接字。您可以使用以下協議

方案描述示例
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管理卷