You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible命令中正确转义符号?Docker命令执行求助

解决Ansible执行Docker过滤命令的问题

你遇到的问题核心有两点:

  1. Ansible的command模块不支持shell管道、正则过滤这类特性,这类操作需要用shell模块执行
  2. 命令里的{{.Names}}会被Ansible当作变量解析,导致传递到目标主机的命令被篡改

直接使用以下配置即可解决:

- hosts: kubernetes
  tasks:
    - name: 列出不受K8s管控的容器
      shell: docker ps --format '{{.Names}}' -a | egrep -v '^k8s.*$'
      register: unmanaged_containers

    - debug: var=unmanaged_containers.stdout_lines

关键说明:

  • 用shell模块替代command模块:shell模块会调用目标主机的/bin/sh执行完整shell命令,天然支持管道、正则过滤这类操作
  • 单引号包裹命令:Ansible不会解析单引号内部的{{...}},会原样传递给Docker命令使用

如果一定要用command模块,需要转义双大括号并指定shell解释器,但这种方式繁琐,不推荐:

- hosts: kubernetes
  tasks:
    - name: 列出不受K8s管控的容器
      command: docker ps --format '{{ '{{' }}.Names{{ '}}' }}' -a | egrep -v '^k8s.*$'
      register: unmanaged_containers
      args:
        executable: /bin/bash

内容的提问来源于stack exchange,提问作者voipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:11:01