如何在Ansible命令中正确转义符号?Docker命令执行求助
解决Ansible执行Docker过滤命令的问题
你遇到的问题核心有两点:
- Ansible的
command模块不支持shell管道、正则过滤这类特性,这类操作需要用shell模块执行 - 命令里的
{{.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
相关产品推荐
相关产品推荐

