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管理卷
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.