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 设置的默认上下文)
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设置进度输出的类型(autoplainttyrawjson)当使用 BuildKit 后端进行构建时。使用 plain 以显示容器输出(默认为 auto)。

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

变量描述
HTTP_PROXYHTTP 请求的代理 URL,除非被 NoProxy 覆盖。
HTTPS_PROXY用于 HTTPS 请求的代理 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

注意

不要同时使用 -t-a stderr 选项,因为 pty 实现中存在限制。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 指定一个外部Binaries作为默认凭据存储。当设置了此属性时,docker login 将尝试把凭据存储在 docker-credential-<value> 指定的Binaries中,该文件在 $PATH 上可见。如果未设置此属性,凭据将存储在 CLI 配置文件的 auths 属性中。更多信息,请参阅 docker login 文档中的凭据存储部分

属性 credHelpers 指定了一组凭据助手,在存储和检索特定镜像仓库的凭据时,优先使用这些助手,而不是 credsStoreauths。如果设置了此属性,则在存储或检索特定镜像仓库的凭据时,将使用Binaries docker-credential-<value>。有关更多信息,请参阅 docker login 文档中的 凭据助手 部分

容器的自动代理配置

属性 proxies 指定自动在容器上设置的代理环境变量,并设置为 --build-argdocker build 期间使用的容器上。 可以配置一个 "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-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)

您可以在调用 docker 命令时使用 -H--host 标志来指定要使用的套接字。您可以使用以下协议:

方案描述示例
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 标志,并且您没有使用自定义 上下文, 命令将使用以下默认套接字:

  • unix:///var/run/docker.sock 在 macOS 和 Linux 上
  • npipe:////./pipe/docker_engine 在 Windows 上

若要达到类似的效果,而无需为每个命令指定 -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 (legacy builder)从 Dockerfile 构建镜像
docker builder管理构建
docker buildxDocker Buildx
docker checkpoint管理检查点
docker composeDocker Compose
docker config管理 Swarm 配置
docker container管理容器
docker context管理上下文
docker debug获取任何容器或镜像的 shell。这是使用 `docker exec` 进行调试的替代方案。
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管理集群
docker system管理 Docker
docker trust管理 Docker 镜像信任
docker version显示 Docker 版本信息
docker volume管理卷