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 使用 Notary 对镜像进行签名和验证。对于 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),并且仅按对象类型打印 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 后端构建时,设置进度输出类型(auto, plain, tty, rawjson)。使用 plain 来显示容器输出(默认为 auto)。

由于 Docker 使用 Go 开发,您也可以使用 Go 运行时使用的任何环境变量。特别是,您可能会发现以下变量很有用

变量描述
HTTP_PROXYHTTP 请求的代理 URL,除非被 NoProxy 覆盖。
HTTPS_PROXYHTTPS 请求的代理 URL,除非被 NoProxy 覆盖。
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 功能默认启用,无需任何配置即可启用它们。

Notary

如果使用您自己的 Notary 服务器以及自签名证书或内部证书颁发机构,则需要将证书放置在您的 Docker 配置目录的 tls/<registry_url>/ca.crt 位置。

或者,您可以通过将其添加到系统的根证书颁发机构列表中来全局信任该证书。

选项

选项默认值描述
--config/root/.docker客户端配置文件位置
-c, --context用于连接守护进程的上下文名称(覆盖 DOCKER_HOST 环境变量和使用 docker context use 设置的默认上下文)
-D, --debug启用调试模式
-H, --host要连接的守护进程套接字
-l, --log-levelinfo设置日志级别(debug, info, warn, error, fatal
--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://[<path>]Unix 套接字(仅限 Linux)unix:///var/run/docker.sock
tcp://[<IP or host>[:port]]TCP 连接tcp://174.17.0.1:2376
ssh://[username@]<IP or host>[:port]SSH 连接ssh://user@192.168.64.5
npipe://[<name>]命名管道(仅限 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 (测试版)Docker Desktop
docker image管理镜像
docker init为您的项目创建 Docker 相关的启动文件
docker inspect返回 Docker 对象的底层信息
docker login验证到注册表
docker logout从注册表注销
docker manifest管理 Docker 镜像清单和清单列表
docker network管理网络
docker node管理 Swarm 节点
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管理卷