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 rm 和 docker pull),并且只打印每个对象类型的 Management commands(例如 docker container)。这可能会在未来版本中成为默认设置。 |
DOCKER_HOST | 要连接的守护程序套接字。 |
DOCKER_TLS | 为 docker 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_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 标志,这些字段允许您自定义某些命令的默认输出格式。
| 属性 | 描述 |
|---|---|
configFormat | docker config ls 输出的自定义默认格式。有关支持的格式化指令列表,请参阅 docker config ls。 |
imagesFormat | docker 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。 |
psFormat | docker 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 不允许这些头改变它自己设置的任何头。
或者,使用 DOCKER_CUSTOM_HEADERS 环境变量,该变量在 v27.1 及更高版本中可用。此环境变量是实验性的,其确切行为可能会改变。
凭据存储选项
属性 credsStore 指定了一个外部二进制文件作为默认的凭据存储。当设置此属性时,docker login 将尝试将凭据存储在 $PATH 可见的 docker-credential-<value> 指定的二进制文件中。如果未设置此属性,凭据将存储在 CLI 配置文件的 auths 属性中。有关更多信息,请参阅 docker login 文档中的**凭据存储**部分
属性 credHelpers 指定了一组凭证助手,在存储和检索特定注册表的凭证时,优先使用这些助手而不是 credsStore 或 auths。如果设置了此属性,当存储或检索特定注册表的凭证时,将使用二进制文件 docker-credential-<value>。有关更多信息,请参阅 docker login 文档中的**凭证助手**部分
容器的自动代理配置
属性 proxies 指定了要自动在容器上设置的代理环境变量,并在 docker build 期间用作容器上的 --build-arg。可以配置一组 "default" 代理,并将其用于客户端连接到的任何 Docker 守护程序,或者为每个主机(Docker 守护程序)配置,例如 https://docker-daemon1.example.com。可以为每个环境设置以下属性
| 属性 | 描述 |
|---|---|
httpProxy | 容器的 HTTP_PROXY 和 http_proxy 的默认值,以及 docker build 上的 --build-arg |
httpsProxy | 容器的 HTTPS_PROXY 和 https_proxy 的默认值,以及 docker build 上的 --build-arg |
ftpProxy | 容器的 FTP_PROXY 和 ftp_proxy 的默认值,以及 docker build 上的 --build-arg |
noProxy | 容器的 NO_PROXY 和 no_proxy 的默认值,以及 docker build 上的 --build-arg |
allProxy | 容器的 ALL_PROXY 和 all_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 attach、docker exec、docker run 或 docker 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 | 信息 | 设置日志级别(debug、info、warn、error、fatal) |
--tls | 使用 TLS;由 --tlsverify 暗示 | |
--tlscacert | /root/.docker/ca.pem | 仅信任由该 CA 签名的证书 |
--tlscert | /root/.docker/cert.pem | TLS 证书文件路径 |
--tlskey | /root/.docker/key.pem | TLS 密钥文件路径 |
--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 buildx | Docker Buildx |
docker checkpoint | 管理检查点 |
docker compose | Docker 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 model | Docker 模型运行器 |
docker network | 管理网络 |
docker node | 管理 Swarm 节点 |
docker offload | 从 CLI 控制 Docker 卸载 |
docker plugin | 管理插件 |
docker scout | Docker 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 | 管理卷 |