Ansible 목록 도커 컨테이너

Ansible 목록 도커 컨테이너

특정 호스트에서 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

쉘 명령을 사용하여 다음 명령을 실행할 수도 있습니다. sudo docker 컨테이너 ls -a

또 다른 아이디어:

    - name: docker container ls -a
      tags: container_ls
      become: True
      shell:
        "docker container ls -a"
      register: container_info

    - name: docker container ls -a result
      tags: container_ls
      debug:
        msg: "{{container_info.stdout_lines}}"

여기에 이미지 설명을 입력하세요.

답변4

최근에 추가docker_psGalaxy 컬렉션의 pytoccaz.docker 모듈은 사전 목록을 출력으로 포함하는 좋은 솔루션을 제공합니다.

관련 정보