community.docker.docker_container_exec 模块 – 在 Docker 容器中执行命令

注意

此模块是 community.docker 集合 (版本 4.1.0) 的一部分。

如果您使用的是 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.docker。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定: community.docker.docker_container_exec

community.docker 1.5.0 中的新增功能

概要

  • 在 Docker 容器中执行命令。

要求

执行此模块的主机需要以下要求。

  • Docker API >= 1.25

  • backports.ssl_match_hostname (在 Python 2 上使用 TLS 时)

  • paramiko (在使用 SSH 且 use_ssh_client=false 时)

  • pyOpenSSL (在使用 TLS 时)

  • pywin32 (在 Windows 32 上使用命名管道时)

  • requests

参数

参数

注释

api_version

别名:docker_api_version

字符串

Docker 主机上运行的 Docker API 的版本。

默认为此集合和 docker 守护程序支持的最新 API 版本。

如果任务中未指定该值,则将使用环境变量 DOCKER_API_VERSION 的值。如果未设置环境变量,则将使用默认值。

默认值: "auto"

argv

列表 / 元素=字符串

要执行的命令。

由于这是一个参数列表,因此不需要引用。

必须指定 argvcommand 中的一个。

ca_path

别名:ca_cert, tls_ca_cert, cacert_path

路径

通过提供 CA 证书文件的路径来执行服务器验证时使用 CA 证书。

如果任务中未指定该值并且已设置环境变量 DOCKER_CERT_PATH,则将使用环境变量 DOCKER_CERT_PATH 中指定的目录中的 ca.pem 文件。

此选项以前称为 ca_cert,并在 community.docker 3.6.0 中重命名为 ca_path。旧名称已添加为别名,仍然可以使用。

chdir

字符串

在其中运行命令的目录。

client_cert

别名:tls_client_cert, cert_path

路径

客户端 TLS 证书文件的路径。

如果任务中未指定该值并且已设置环境变量 DOCKER_CERT_PATH,则将使用环境变量 DOCKER_CERT_PATH 中指定的目录中的 cert.pem 文件。

client_key

别名:tls_client_key, key_path

路径

客户端 TLS 密钥文件的路径。

如果任务中未指定该值并且已设置环境变量 DOCKER_CERT_PATH,则将使用环境变量 DOCKER_CERT_PATH 中指定的目录中的 key.pem 文件。

command

字符串

要执行的命令。

必须指定 argvcommand 中的一个。

container

字符串 / 必需

要在其中执行命令的容器名称。

调试模式

布尔值

调试模式

选项

  • false ← (默认)

  • true

分离模式

布尔值

community.docker 2.1.0 版本中添加

是否同步运行命令(detach=false,默认)或异步运行(detach=true)。

如果设置为 true,则无法提供 stdin,并且不会返回返回值 stdoutstderrrc

选项

  • false ← (默认)

  • true

docker_host

别名:docker_url

字符串

用于连接到 Docker API 的 URL 或 Unix 套接字路径。要连接到远程主机,请提供 TCP 连接字符串。例如,tcp://192.0.2.23:2376。如果使用 TLS 加密连接,模块将自动将连接 URL 中的 tcp 替换为 https

如果任务中未指定此值,则将改用环境变量 DOCKER_HOST 的值。如果未设置环境变量,则将使用默认值。

默认值: "unix:///var/run/docker.sock"

env

字典

community.docker 2.1.0 版本中添加

包含环境变量及其相应值的字典,这些值将传递到容器内运行的命令。

YAML 解析器可能将解析为数字、布尔值或其他类型的值必须用引号括起来(例如 "true"),以避免数据丢失。

请注意,如果您使用 Jinja2 模板传入值,例如 "{{ value }}",则需要添加 | string 以防止 Ansible 将诸如 "true" 之类的字符串转换回布尔值。正确的方法是使用 "{{ value | string }}"

stdin

字符串

将命令的标准输入直接设置为指定的值。

只有在 detach=false 时才能使用。

stdin_add_newline

布尔值

如果设置为 true,则将换行符附加到 stdin

选项

  • false

  • true ← (默认)

strip_empty_ends

布尔值

从结果中 stdout/stderr 末尾删除空行。

选项

  • false

  • true ← (默认)

超时时间

整数

等待 API 响应的最长时间(以秒为单位)。

如果任务中未指定此值,则将改用环境变量 DOCKER_TIMEOUT 的值。如果未设置环境变量,则将使用默认值。

默认值: 60

tls

布尔值

通过使用 TLS 来保护与 API 的连接,而无需验证 Docker 主机服务器的真实性。请注意,如果也设置了 validate_certstrue,则它将优先。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS 的值。如果未设置环境变量,则将使用默认值。

选项

  • false ← (默认)

  • true

tls_hostname

字符串

验证 Docker 主机服务器的真实性时,请提供服务器的预期名称。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS_HOSTNAME 的值。如果未设置环境变量,则将使用默认值。

请注意,此选项在较旧的版本中具有默认值 localhost。它已在 community.docker 3.0.0 中删除。

tty

布尔值

是否分配 TTY。

选项

  • false ← (默认)

  • true

use_ssh_client

布尔值

community.docker 1.5.0 版本中添加

对于 SSH 传输,请使用 ssh CLI 工具,而不是 paramiko。

选项

  • false ← (默认)

  • true

用户

字符串

如果指定,则使用该用户执行此命令。

validate_certs

别名:tls_verify

布尔值

通过使用 TLS 并验证 Docker 主机服务器的真实性来保护与 API 的连接。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS_VERIFY 的值。如果未设置环境变量,则将使用默认值。

选项

  • false ← (默认)

  • true

属性

属性

支持

描述

action_group

操作组: community.docker.docker, docker

module_defaults 中使用 group/dockergroup/community.docker.docker 为此模块设置默认值。

check_mode

支持:不支持

可以在 check_mode 下运行并返回更改状态预测,而无需修改目标。

diff_mode

支持:不支持

在差异模式下,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息。

备注

注意

示例

- name: Run a simple command (command)
  community.docker.docker_container_exec:
    container: foo
    command: /bin/bash -c "ls -lah"
    chdir: /root
  register: result

- name: Print stdout
  ansible.builtin.debug:
    var: result.stdout

- name: Run a simple command (argv)
  community.docker.docker_container_exec:
    container: foo
    argv:
      - /bin/bash
      - "-c"
      - "ls -lah > /dev/stderr"
    chdir: /root
  register: result

- name: Print stderr lines
  ansible.builtin.debug:
    var: result.stderr_lines

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

exec_id

字符串

community.docker 2.1.0 版本中添加

命令的执行 ID。

返回:成功且detach=true

示例:"249d9e3075655baf705ed8f40488c5e9434049cf3431976f1bfdb73741c574c5"

rc

整数

命令的退出代码。

返回:成功且detach=false

示例:0

stderr

字符串

容器命令的标准错误输出。

返回:成功且detach=false

stdout

字符串

容器命令的标准输出。

返回:成功且detach=false

作者

  • Felix Fontein (@felixfontein)