community.docker.docker_containers 清单 – 用于 Docker 容器的 Ansible 动态清单插件
注意
此清单插件是 community.docker 集合(版本 4.1.0)的一部分。
如果您使用的是 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list。
要安装它,请使用:ansible-galaxy collection install community.docker。您需要其他要求才能使用此清单插件,有关详细信息,请参阅 要求。
要在 playbook 中使用它,请指定:community.docker.docker_containers。
community.docker 1.1.0 中的新增功能
概要
- 从 Docker API 读取清单。 
- 使用以 - docker.(yml|yaml)结尾的 YAML 配置文件。
要求
本地控制器节点上需要以下要求才能执行此清单。
- requests 
- pywin32(在 Windows 32 上使用命名管道时) 
- paramiko(当使用 SSH 时,且 - use_ssh_client=false)
- pyOpenSSL(当使用 TLS 时) 
- backports.ssl_match_hostname(当在 Python 2 上使用 TLS 时) 
参数
| 参数 | 注释 | 
|---|---|
| 添加与  
 
 
 
 
 
 
 
 
 如果未将其设置为  选择 
 | |
| Docker 主机上运行的 Docker API 版本。 默认为此集合和 docker 守护进程支持的最新 API 版本。 如果在任务中未指定该值,则将使用环境变量  默认值:  | |
| 通过提供 CA 证书文件的路径,在执行服务器验证时使用 CA 证书。 如果任务中未指定值,且设置了环境变量  此选项最初名为  | |
| 客户端 TLS 证书文件的路径。 如果任务中未指定值,且设置了环境变量  | |
| 客户端 TLS 密钥文件的路径。 如果任务中未指定值,且设置了环境变量  | |
| 从 Jinja2 表达式创建变量。 默认值:  | |
| 要使用容器的连接类型。 连接容器的一种方法是使用 SSH ( 或者, 当使用  请注意,community.docker.docker_api 不适用于 TCP TLS 套接字!有关更多信息,请参阅 https://github.com/ansible-collections/community.docker/issues/605。 选择 
 | |
| 调试模式 选择 
 | |
| 当容器的 SSH 端口映射到接口 “0.0.0.0” 时,要分配给 ansible_host 的 IP 地址。 仅当  默认值:  | |
| 用于连接 Docker API 的 URL 或 Unix 套接字路径。 要连接到远程主机,请提供 TCP 连接字符串。 例如, 如果任务中未指定值,则将改用环境变量  默认值:  | |
| 一个包含/排除过滤器的列表,允许为此清单选择/取消选择主机。 过滤器按顺序处理,直到找到第一个匹配的过滤器  | |
| 一个 Jinja2 条件。 如果它匹配主机,则该主机被排除。 只能指定  | |
| 一个 Jinja2 条件。 如果它匹配主机,则该主机被包含。 只能指定  | |
| 根据 Jinja2 条件将主机添加到组。 默认值:  | |
| 根据变量的值将主机添加到组。 默认值:  | |
| 当主机变量的值为空字符串时的默认值。 此选项与  | |
| 用于生成组的输入字典中的键。 | |
| 键控组的父组。 | |
| 键控组名称将以此前缀开头。 默认值:  | |
| 用于构建键控组名称的分隔符。 默认值:  | |
| 将此选项设置为  此选项与  选择 
 | |
| 与  默认情况下,没有提供前缀或分隔符的键控组的名称将以下划线开头。 这是因为默认前缀为  如果未给出前缀,请将此选项设置为  如果组名派生自映射,则分隔符仍用于连接各个项。 要完全不在组名中使用分隔符,请将键控组的分隔符设置为空字符串。 选择 
 | |
| 此插件的名称,应始终设置为  选择 
 | |
| 如果设置为  由于可以在表达式中使用 facts,它们可能并非总是可用,因此默认情况下我们会忽略这些错误。 选择 
 | |
| 通过使用 TLS 加密到 API 的连接,但不验证 Docker 主机服务器的真实性。请注意,如果  如果任务中未指定该值,则将使用环境变量  选择 
 | |
| 验证 Docker 主机服务器的真实性时,请提供服务器的预期名称。 如果任务中未指定该值,则将使用环境变量  请注意,此选项在旧版本中的默认值为  | |
| 将额外变量合并到可用于组合的变量中(优先级最高)。 选择 
 配置 
 | |
| 对于 SSH 传输,请使用  选择 
 | |
| 通过使用 TLS 并验证 Docker 主机服务器的真实性来保护与 API 的连接。 如果任务中未指定该值,则将使用环境变量  选择 
 | |
| 切换以(不)包含所有可用的检查元数据。 请注意,所有顶级键都将转换为  如果此值为  
 选择 
 | 
注释
注意
- 配置文件必须是 YAML 文件,其文件名以 - docker.yml或- docker.yaml结尾。不接受其他文件名。
- 通过为每个任务提供参数或定义环境变量来连接到 Docker 守护程序。可以定义 - DOCKER_HOST、- DOCKER_TLS_HOSTNAME、- DOCKER_API_VERSION、- DOCKER_CERT_PATH、- DOCKER_TLS、- DOCKER_TLS_VERIFY和- DOCKER_TIMEOUT。如果正在使用 docker machine,请运行随产品附带的脚本,该脚本会设置环境。它将为您设置这些变量。有关更多详细信息,请参阅 https://docs.dockerd.com.cn/machine/reference/env/。
- 此模块不使用 Docker SDK for Python 与 Docker 守护程序通信。它使用从此集合中包含的 Docker SDK 或 Python 派生的代码。 
示例
# Minimal example using local Docker daemon
plugin: community.docker.docker_containers
docker_host: unix:///var/run/docker.sock
# Minimal example using remote Docker daemon
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2375
# Example using remote Docker daemon with unverified TLS
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2376
tls: true
# Example using remote Docker daemon with verified TLS and client certificate verification
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2376
validate_certs: true
ca_path: /somewhere/ca.pem
client_key: /somewhere/key.pem
client_cert: /somewhere/cert.pem
# Example using constructed features to create groups
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2375
strict: false
keyed_groups:
  # Add containers with primary network foo to a network_foo group
  - prefix: network
    key: 'docker_hostconfig.NetworkMode'
  # Add Linux hosts to an os_linux group
  - prefix: os
    key: docker_platform
# Example using SSH connection with an explicit fallback for when port 22 has not been
# exported: use container name as ansible_ssh_host and 22 as ansible_ssh_port
plugin: community.docker.docker_containers
connection_type: ssh
compose:
  ansible_ssh_host: ansible_ssh_host | default(docker_name[1:], true)
  ansible_ssh_port: ansible_ssh_port | default(22, true)
# Only consider containers which have a label 'foo', or whose name starts with 'a'
plugin: community.docker.docker_containers
filters:
  # Accept all containers which have a label called 'foo'
  - include: >-
      "foo" in docker_config.Labels
  # Next accept all containers whose inventory_hostname starts with 'a'
  - include: >-
      inventory_hostname.startswith("a")
  # Exclude all containers that didn't match any of the above filters
  - exclude: true
