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 rm和docker pull),并且仅打印每个对象类型的管理命令(例如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
有时,多个选项可能需要更复杂的 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标志,则可以使用这些字段自定义某些命令的默认输出格式。
| 属性 | 描述 |
|---|---|
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 不允许这些头更改其自身设置的任何头。
或者,使用在 v27.1 及更高版本中可用的 DOCKER_CUSTOM_HEADERS 环境变量。此环境变量为实验性功能,其确切行为可能会发生变化。
凭据存储选项
属性 credsStore 指定一个外部二进制文件作为默认凭据存储。设置此属性后,docker login 将尝试将凭据存储在 docker-credential-<value> 指定的二进制文件中,该文件在 $PATH 中可见。如果未设置此属性,则凭据将存储在 CLI 配置文件的 auths 属性中。有关更多信息,请参阅 docker login 文档中的**凭据存储**部分
属性 credHelpers 指定一组凭据帮助程序,在存储和检索特定注册表的凭据时,优先于 credsStore 或 auths 使用。如果设置此属性,则在存储或检索特定注册表的凭据时,将使用二进制文件 docker-credential-<value>。有关更多信息,请参阅 docker login 文档中的**凭据帮助程序**部分
容器的自动代理配置
属性 proxies 指定要在容器上自动设置的代理环境变量,并在 docker build期间使用的容器上设置为 --build-arg。可以配置一组“默认”代理,并将用于客户端连接到的任何 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 客户端启动的所有容器。用户可以在每个容器的基础上覆盖您的自定义按键序列或默认按键序列。为此,用户可以使用 --detach-keys 标志与 docker attach、docker exec、docker run 或 docker 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-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 或主机>[: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 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 | 管理 Swarm |
docker system | 管理 Docker |
docker trust | 管理 Docker 镜像的信任 |
docker version | 显示 Docker 版本信息 |
docker volume | 管理卷 |