Linux

ansible 列出 docker 容器

  • July 12, 2021

我有一本劇本,其中一項任務收集有關在特定主機上執行 docker 容器的資訊。


- name: Gather info
 hosts: "{{ hosts }}"
 gather_facts: no
 tasks:

  - name: Check all running containers
    become: yes
    command: docker ps --format "{{ \.Names }}"
    register: dkr_ps
 
       
  - debug: msg="{{dkr_ps}}"

但不知何故,由命令模組執行的 docker cmd 保持,拋出以下錯誤:

TemplateSyntaxError: unexpected char u'\\' at 23
 line 1

我假設我沒有正確逃脫?

您有兩個衝突的模板:docker命令預期的模板和 Ansible 中使用的 Jinja2 模板。Jinja2 試圖解釋{{ .Names }}哪個無效;這就是錯誤消息的來源。

一般的經驗法則是通過將模板符號轉換為有效的 Jinja2 表達式來轉義 Docker 模板:

command: docker ps --format "{{ '{{' }} .Names {{ '}}' }}"

轉義引號和大括號

   - command: 'docker ps --format \"\{\{ .Names \}\}\"'

先測試一下。例如

   - command: 'echo docker ps --format \"\{\{ .Names \}\}\"'
     register: result
   - debug:
       var: result.cmd|join(' ')

 result.cmd|join(' '): echo docker ps --format "{{ .Names }}"

引用自:https://unix.stackexchange.com/questions/658001