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 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 | 设置进度输出的类型(auto、plain、tty、rawjson)当使用
BuildKit 后端进行构建时。使用 plain 以显示容器输出(默认为 auto)。 |
由于 Docker 是使用 Go 语言开发的,因此您也可以使用 Go 运行时使用的任何环境变量。特别是,您可能会发现这些变量很有用:
| 变量 | 描述 |
|---|---|
HTTP_PROXY | HTTP 请求的代理 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 标志。
| 属性 | 描述 |
|---|---|
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 指定一个外部Binaries作为默认凭据存储。当设置了此属性时,docker login 将尝试把凭据存储在 docker-credential-<value> 指定的Binaries中,该文件在 $PATH 上可见。如果未设置此属性,凭据将存储在 CLI 配置文件的 auths 属性中。更多信息,请参阅
docker login 文档中的凭据存储部分
属性 credHelpers 指定了一组凭据助手,在存储和检索特定镜像仓库的凭据时,优先使用这些助手,而不是 credsStore 或 auths。如果设置了此属性,则在存储或检索特定镜像仓库的凭据时,将使用Binaries docker-credential-<value>。有关更多信息,请参阅 docker login 文档中的 凭据助手 部分
容器的自动代理配置
属性 proxies 指定自动在容器上设置的代理环境变量,并设置为 --build-arg 在 docker build 期间使用的容器上。
可以配置一个 "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 | info | 设置日志级别 (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)
您可以在调用 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 buildx | Docker Buildx |
docker checkpoint | 管理检查点 |
docker compose | Docker 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 scout | Docker 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 | 管理卷 |