docker - ansible w - 显示当前容器状态

我正在做一个小的Ansible项目,我正在使用Docker容器。

我的问题是:

我想得到正在运行的Dockercontainer的状态!

我的意思是,我希望获得容器的当前状态,Docker使用"Docker ps"命令显示你的当前状态。

示例如下:

  • 启动
  • 退出
  • 正在重新启动

我想从特定的容器中得到一个结果,但不使用命令或shell模块!

时间:

在Ansible 2.8中,你可以使用docker_container_facts,它实际上从docker inspect <container>返回输入:


- name: Get infos on container


 docker_container_facts:


 name: my_container


 register: result



- name: Does container exist?


 debug:


 msg:"The container {{ 'exists' if result.exists else 'does not exist' }}"



- name: Print the status of the container


 debug:


 msg:"The container status is {{ result.docker_container['State']['Status'] }}"


 when: result.exists



使用我的Docker版本,State包含以下内容:


"State": {


"Status":"running",


"Running": true,


"Paused": false,


"Restarting": false,


"OOMKilled": false,


"Dead": false,


"Pid": 8235,


"ExitCode": 0,


"Error":"",


"StartedAt":"2019-01-25T14:10:08.3206714Z",


"FinishedAt":"0001-01-01T00:00:00Z"


}



有关详细信息,请参阅https://docs.ansible.com/ansible/devel/modules/docker_container_facts_module.html

不幸的是,Docker周围的模块目前都没有"列出容器",我做了以下工作来获取状态:


- name: get container status


 shell: docker ps -a -f name={{ container }} --format {%raw%}"table {{.Status}}"{%endraw%} | awk 'FNR == 2 {print}' | awk '{print $1}'


 register: status



结果将在状态变量中可用

这个问题不清楚,但是,一般来讲,在两种情况下你可以使用ansible和Docker :

  • 利用ansible的Docker模块

http://docs.ansible.com/ansible/latest/docker_module.html


- name: data container


 docker:


 name: mydata


 image: busybox


 state: present


 volumes:


 - /data



  • 通过在Dockerfile内部调用ansible

    从centos7运行ansible playbook -i库存playbook.yml

我这里可以工作:


 - name: Get container status


 shell: docker inspect --format={{ '{{.State.Running}}' }} {{ container_name }}


 register: status


 #Start the container if it is not running


 - name: Start the container if it is in stopeed state.


 shell: docker start heuristic_mestorf


 when: status.stdout !="true"



...