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 设置的默认 context) |
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 | 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
注意
由于
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 功能默认启用,无需任何配置即可启用它们。
Notary
如果使用您自己的 Notary 服务器以及自签名证书或内部证书颁发机构,则需要将证书放置在您的 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)
您可以使用 -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
标志,并且未使用自定义上下文,则命令会使用以下默认套接字
- 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 (测试版) | Docker Desktop |
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 | 管理 Swarm |
docker system | 管理 Docker |
docker trust | 管理 Docker 镜像的信任 |
docker version | 显示 Docker 版本信息 |
docker volume | 管理卷 |