使用 Docker 命令行
Docker CLI 的基本命令是docker
.有关可用标志和子命令的信息,请参阅
CLI 参考
根据您的 Docker 系统配置,您可能需要docker
在每个命令前面加上sudo
.为了避免使用sudo
该
docker
命令,系统管理员可以创建一个名为 的 Unix 组
docker
并向其中添加用户。
有关安装 Docker 或sudo
配置的更多信息,请参阅
适用于您的操作系统的安装说明。
环境变量
命令行支持以下环境变量列表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_DEFAULT_PLATFORM | 采用该标志的命令的默认平台--platform 。 |
DOCKER_HIDE_LEGACY_COMMANDS | 设置后,Docker 会在输出中隐藏“传统”顶级命令(例如docker rm 、 和docker pull )docker help ,并且仅打印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 显示容器输出(默认)。plain tty rawjson auto |
由于 Docker 是使用 Go 开发的,因此您还可以使用 Go 运行时使用的任何环境变量。特别是,您可能会发现这些很有用:
多变的 | 描述 |
---|---|
HTTP_PROXY | HTTP 请求的代理 URL,除非被 NoProxy 覆盖。 |
HTTPS_PROXY | HTTPS 请求的代理 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 配置来自定义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 不允许这些标头更改它为自己设置的任何标头。
凭证存储选项
该属性credsStore
指定一个外部二进制文件作为默认凭证存储。设置此属性后,docker login
将尝试将凭据存储在由 指定的二进制文件中,docker-credential-<value>
该二进制文件在 上可见$PATH
。如果未设置此属性,凭据将存储在auths
CLI 配置文件的属性中。有关更多信息,请参阅
文档中的凭据存储部分docker login
该属性credHelpers
指定一组凭证助手,以便在存储和检索特定注册表的凭证时credsStore
优先使用。auths
如果设置此属性,则
docker-credential-<value>
在存储或检索特定注册表的凭据时将使用二进制文件。有关更多信息,请参阅
文档中的凭据帮助程序部分docker login
容器的自动代理配置
该属性proxies
指定要在容器上自动设置的代理环境变量,并设置为--build-arg
在docker build
.可以配置一"default"
组代理,并将其用于客户端连接到的任何 Docker 守护进程,或每个主机(Docker 守护进程)的配置,例如https://docker-daemon1.example.com
.可以为每个环境设置以下属性:
财产 | 描述 |
---|---|
httpProxy | HTTP_PROXY 容器的和的默认值http_proxy ,以及--build-arg docker build |
httpsProxy | HTTPS_PROXY 容器的和的默认值https_proxy ,以及--build-arg docker build |
ftpProxy | FTP_PROXY 容器的和的默认值ftp_proxy ,以及--build-arg docker build |
noProxy | NO_PROXY 容器的和的默认值no_proxy ,以及--build-arg docker build |
allProxy | ALL_PROXY 容器的和的默认值all_proxy ,以及--build-arg docker build |
这些设置仅用于配置容器的代理设置,而不用作docker
CLI 或dockerd
守护程序的代理设置。请参阅
环境变量和
HTTP/HTTPS 代理
部分,了解为 cli 和守护程序配置代理设置。
警告
代理设置可能包含敏感信息(例如,代理是否需要身份验证)。环境变量以纯文本形式存储在容器的配置中,因此可以通过远程 API 检查或在使用
docker commit
.
从容器分离的默认键序列
一旦连接到容器,用户就可以使用 usingCTRL-p CTRL-q
键序列将其分离并使其保持运行。此分离键序列可使用detachKeys
属性进行自定义。指定<sequence>
属性的值。的格式<sequence>
是一个以逗号分隔的字母 [aZ] 列表,或ctrl-
与以下任意项的组合:
a-z
(单个小写字母字符)@
(在标志处)[
(左括号)\\
(两个反斜杠)_
(下划线)^
(插入符号)
您的自定义适用于通过 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: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.sock
SSH 主机上的 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 stderr
pty
stderr
pty
stdout
字符串和整数
像expect a string这样的选项--name=""
,只能指定一次。诸如期望整数之类的选项-c=0
只能指定一次。