使用 Docker 命令行

Docker CLI 的基本命令是docker.有关可用标志和子命令的信息,请参阅 CLI 参考

根据您的 Docker 系统配置,您可能需要docker在每个命令前面加上sudo.为了避免使用sudodocker命令,系统管理员可以创建一个名为 的 Unix 组 docker并向其中添加用户。

有关安装 Docker 或sudo配置的更多信息,请参阅 适用于您的操作系统的安装说明。

环境变量

命令行支持以下环境变量列表docker

多变的描述
DOCKER_API_VERSION覆盖协商的 API 版本以用于调试(例如1.19
DOCKER_CERT_PATH您的身份验证密钥的位置。dockerCLI 和 守护程序都使用此变量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_DEFAULT_PLATFORM采用该标志的命令的默认平台--platform
DOCKER_HIDE_LEGACY_COMMANDS设置后,Docker 会在输出中隐藏“传统”顶级命令(例如docker rm、 和docker pulldocker help,并且仅打印Management commands每个对象类型(例如)。docker container这可能会成为未来版本中的默认设置。
DOCKER_HOST要连接的守护进程套接字。
DOCKER_TLSdocker为CLI(相当于--tls命令行选项)建立的连接启用 TLS 。设置为非空值以启用 TLS。请注意,如果设置了任何其他 TLS 选项,则会自动启用 TLS。
DOCKER_TLS_VERIFY设置后,Docker 使用 TLS 并验证远程。dockerCLI 和 守护程序都使用此变量dockerd
BUILDKIT_PROGRESS使用 BuildKit 后端构建时 设置进度输出的类型( auto,,,, ) 。使用 plain 显示容器输出(默认)。plainttyrawjsonauto

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

多变的描述
HTTP_PROXYHTTP 请求的代理 URL,除非被 NoProxy 覆盖。
HTTPS_PROXYHTTPS 请求的代理 URL,除非被 NoProxy 覆盖。
NO_PROXY逗号分隔值指定应从代理中排除的主机。

有关这些变量的详细信息,请参阅 Go 规范。

配置文件

默认情况下,Docker 命令行将其配置文件存储在.docker您的$HOME目录中调用的目录中。

Docker 管理配置目录中的大部分文件,您不应该修改它们。但是,您可以修改该 config.json文件来控制命令行为的某些方面docker

您可以docker使用环境变量或命令行选项修改命令行为。您还可以使用其中的选项 config.json来修改某些相同的行为。如果设置了环境变量和--config标志,则标志优先于环境变量。命令行选项覆盖环境变量,环境变量覆盖您在config.json文件中指定的属性。

更改 .docker 目录

要指定不同的目录,请使用DOCKER_CONFIG 环境变量或--config命令行选项。如果两者都指定,则该--config选项将覆盖DOCKER_CONFIG环境变量。下面的示例docker ps使用 config.json位于~/testconfigs/目录中的文件覆盖该命令。

$ docker --config ~/testconfigs/ ps

该标志仅适用于正在运行的任何命令。对于持久配置,您可以DOCKER_CONFIG在 shell 中设置环境变量(例如~/.profile~/.bashrc)。下面的示例将新目录设置为HOME/newdir/.docker.

$ echo export DOCKER_CONFIG=$HOME/newdir/.docker > ~/.profile

Docker CLI 配置文件 (config.json) 属性

使用 Docker CLI 配置来自定义dockerCLI 设置。配置文件使用 JSON 格式和属性:

默认情况下,配置文件存储在~/.docker/config.json.请参阅 更改.docker目录部分以使用不同的位置。

警告

配置文件和~/.docker配置目录中的其他文件可能包含敏感信息,例如代理的身份验证信息,或者根据您的凭据存储,图像注册表的凭据。在与其他人共享之前检查配置文件的内容,并防止将文件提交到版本控制。

自定义命令的默认输出格式

--format如果未提供标志,这些字段允许您自定义某些命令的默认输出格式。

财产描述
configFormat自定义默认输出格式docker config ls。请 docker config ls参阅 参考资料 获取支持的格式化指令的列表。
imagesFormatdocker images/输出的自定义默认格式docker image ls。请 docker images参阅 参考资料 获取支持的格式化指令的列表。
networksFormat自定义默认输出格式docker network ls。请 docker network ls参阅 参考资料 获取支持的格式化指令的列表。
nodesFormat自定义默认输出格式docker node ls。请 docker node ls参阅 参考资料 获取支持的格式化指令的列表。
pluginsFormat自定义默认输出格式docker plugin ls。请 docker plugin ls参阅 参考资料 获取支持的格式化指令的列表。
psFormatdocker ps/输出的自定义默认格式docker container ps。请 docker ps参阅 参考资料 获取支持的格式化指令的列表。
secretFormat自定义默认输出格式docker secret ls。请 docker secret ls参阅 参考资料 获取支持的格式化指令的列表。
serviceInspectFormat自定义默认输出格式docker service inspect。请 docker service inspect参阅 参考资料 获取支持的格式化指令的列表。
servicesFormat自定义默认输出格式docker service ls。请 docker service ls参阅 参考资料 获取支持的格式化指令的列表。
statsFormat自定义默认输出格式docker stats。请 docker stats参阅 参考资料 获取支持的格式化指令的列表。
tasksFormat自定义默认输出格式docker stack ps。请 docker stack ps参阅 参考资料 获取支持的格式化指令的列表。
volumesFormat自定义默认输出格式docker volume ls。请 docker volume ls参阅 参考资料 获取支持的格式化指令的列表。

自定义 HTTP 标头

该属性HttpHeaders指定一组标头,以包含在从 Docker 客户端发送到守护程序的所有消息中。 Docker 不会尝试解释或理解这些标头;而是尝试解释这些标头。它只是将它们放入消息中。 Docker 不允许这些标头更改它为自己设置的任何标头。

凭证存储选项

该属性credsStore指定一个外部二进制文件作为默认凭证存储。设置此属性后,docker login将尝试将凭据存储在由 指定的二进制文件中,docker-credential-<value>该二进制文件在 上可见$PATH。如果未设置此属性,凭据将存储在authsCLI 配置文件的属性中。有关更多信息,请参阅 文档中的凭据存储部分docker login

该属性credHelpers指定一组凭证助手,以便在存储和检索特定注册表的凭证时credsStore优先使用。auths如果设置此属性,则 docker-credential-<value>在存储或检索特定注册表的凭据时将使用二进制文件。有关更多信息,请参阅 文档中的凭据帮助程序部分docker login

容器的自动代理配置

该属性proxies指定要在容器上自动设置的代理环境变量,并设置为--build-argdocker build.可以配置一"default"组代理,并将其用于客户端连接到的任何 Docker 守护进程,或每个主机(Docker 守护进程)的配置,例如https://docker-daemon1.example.com.可以为每个环境设置以下属性:

财产描述
httpProxyHTTP_PROXY容器的和的默认值http_proxy,以及--build-argdocker build
httpsProxyHTTPS_PROXY容器的和的默认值https_proxy,以及--build-argdocker build
ftpProxyFTP_PROXY容器的和的默认值ftp_proxy,以及--build-argdocker build
noProxyNO_PROXY容器的和的默认值no_proxy,以及--build-argdocker build
allProxyALL_PROXY容器的和的默认值all_proxy,以及--build-argdocker build

这些设置仅用于配置容器的代理设置,而不用作dockerCLI 或dockerd守护程序的代理设置。请参阅 环境变量HTTP/HTTPS 代理 部分,了解为 cli 和守护程序配置代理设置。

警告

代理设置可能包含敏感信息(例如,代理是否需要身份验证)。环境变量以纯文本形式存储在容器的配置中,因此可以通过远程 API 检查或在使用docker commit.

从容器分离的默认键序列

一旦连接到容器,用户就可以使用 usingCTRL-p CTRL-q键序列将其分离并使其保持运行。此分离键序列可使用detachKeys属性进行自定义。指定<sequence>属性的值。的格式<sequence>是一个以逗号分隔的字母 [aZ] 列表,或ctrl-与以下任意项的组合:

  • a-z(单个小写字母字符)
  • @(在标志处)
  • [(左括号)
  • \\(两个反斜杠)
  • _(下划线)
  • ^(插入符号)

您的自定义适用于通过 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: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 功能,无需配置即可启用它们。

公证人

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

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

例子

指定守护进程主机(-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标志,并且未使用自定义 context,则命令将使用以下默认套接字:

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

要实现类似的效果而不必-H为每个命令指定标志,您还可以 创建一个 context,或者使用 DOCKER_HOST环境变量

有关该-H标志的更多信息,请参阅 守护进程套接字选项

使用 TCP 套接字

以下示例显示如何docker ps通过 TCP 调用 IP 地址174.17.0.1、侦听端口 的远程守护程序2376

$ docker -H tcp://174.17.0.1:2376 ps

笔记

按照惯例,Docker 守护程序使用端口2376进行安全 TLS 连接,使用端口2375进行不安全、非 TLS 连接。

使用 SSH 套接字

当您使用 SSH 在远程守护程序上调用命令时,请求将转发到/var/run/docker.sockSSH 主机上的 Unix 套接字。

$ docker -H ssh://user@192.168.64.5 ps

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

$ docker -H ssh://user@192.168.64.5/var/run/docker.sock ps

显示帮助文本

要列出任何命令的帮助,只需执行该命令,然后执行该 --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 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和选项。 All in模式只需转到.-a stderrptystderrptystdout

字符串和整数

像expect a string这样的选项--name="",只能指定一次。诸如期望整数之类的选项-c=0 只能指定一次。