특정 호스트에서 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
내가 제대로 탈출하지 못하고 있는 것 같은데?
답변1
명령에 필요한 템플릿 docker
과 Ansible에서 사용되는 Jinja2 템플릿이라는 두 가지 충돌하는 템플릿이 있습니다. Jinja2는 어느 것이 유효하지 않은지 설명하려고 합니다 {{ .Names }}
. 이것이 바로 오류 메시지의 출처입니다.
일반적인 경험 법칙은 템플릿 기호를 유효한 Jinja2 표현식으로 변환하여 Docker 템플릿을 이스케이프하는 것입니다.
command: docker ps --format "{{ '{{' }} .Names {{ '}}' }}"
답변2
이스케이프 따옴표 및 중괄호
- 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 }}"
답변3
답변4
최근에 추가docker_psGalaxy 컬렉션의 pytoccaz.docker 모듈은 사전 목록을 출력으로 포함하는 좋은 솔루션을 제공합니다.