使用Ansible docker_container,如何显示标准输出? (标准输出)

时间:2016-11-16 06:56:53

标签: docker ansible ansible-playbook

我正在使用Ansible及其模块docker_container在nodejs中启动磁带单元测试容器。这很好,因为我没有让npm搞砸我的主机,我唯一的dev框依赖是python和docker。

我需要能够看到stdout才能看到测试已经运行。但是,Docker的--attach选项未在docker_container中公开,我找不到任何方法可以从容器的ansible启动中打印stdout

我可以回到bash脚本来启动docker容器,但我不想......

如何使用Ansible的docker_container模块显示容器的标准输出?

3 个答案:

答案 0 :(得分:4)

这实际上通过使用detach属性与Ansible v2.5一起使用:

- name: Run the tests
  docker_container:
    detach: false
    name: "foo-container"
    command: npm test
  register: docker_container_output

- name: Show test output
  debug:
    msg: "{{ docker_container_output.ansible_facts.docker_container.Output }}"

- name: Remove the test container
  docker_container:
    state: absent
    name: "foo-container"

重要的是指定detach: false来捕获输出,然后使用ansible_facts.docker_container.Output路径来访问结果。

答案 1 :(得分:0)

不要使用Ansible来运行简单的单元测试。 Ansible使复杂的事情变得简单易行。

以下bash脚本是4行,Ansible playbook已经处于25行,由于并发问题和输出格式问题,仍然没有完全正常运行(我确定我找到了更多)。

对于docker来说,Ansible仍然太新,并不容易处理并发问题,缺少docker功能等等,并且可能只应该在你做一些复杂的事情时使用bash无法轻易处理(比如处理远程服务器,重试等)

#!/bin/bash
docker build -t server-unit-test .
docker run -it --name server-unit-test server-unit-test npm test
docker rm server-unit-test

答案 2 :(得分:-2)

您可以使用此命令查看docker容器的日志... docker logs containerName。要根据TRACE,INFO等级别打印日志,请尝试supervisord。