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 来签署和验证镜像。相当于构建、创建、拉取、推送、运行的--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),并且仅打印每个对象类型的管理命令(例如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 -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

有时,多个选项可能需要更复杂的 value 字符串,例如-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 不允许这些头更改其自身设置的任何头。

或者,使用在 v27.1 及更高版本中可用的 DOCKER_CUSTOM_HEADERS 环境变量。此环境变量为实验性功能,其确切行为可能会发生变化。

凭据存储选项

属性 credsStore 指定一个外部二进制文件作为默认凭据存储。设置此属性后,docker login 将尝试将凭据存储在 docker-credential-<value> 指定的二进制文件中,该文件在 $PATH 中可见。如果未设置此属性,则凭据将存储在 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 客户端启动的所有容器。用户可以在每个容器的基础上覆盖您的自定义按键序列或默认按键序列。为此,用户可以使用 --detach-keys 标志与 docker attachdocker execdocker rundocker start 命令一起指定。

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:[email protected]:3128",
      "httpsProxy": "https://my-proxy.example.com:3129",
      "noProxy":    "intra.mycorp.example.com",
      "ftpProxy":   "http://user:[email protected]:3128",
      "allProxy":   "socks://example.com:1234"
    },
    "https://manager1.mycorp.example.com:2377": {
      "httpProxy":  "http://user:[email protected]: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设置日志级别(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://[<path>]Unix 套接字(仅限 Linux)unix:///var/run/docker.sock
tcp://[<IP 或主机>[:port]]TCP 连接tcp://174.17.0.1:2376
ssh://[username@]<IP 或主机>[:port]SSH 连接ssh://[email protected]
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://[email protected] ps

您可以选择通过将路径组件附加到 SSH 地址的末尾来指定套接字的位置。

$ docker -H ssh://[email protected]/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 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管理卷