使用Ansible docker_容器,如何显示标准输出?(stdout)

使用Ansible docker_容器,如何显示标准输出?(stdout),docker,ansible,ansible-playbook,Docker,Ansible,Ansible Playbook,我正在使用Ansible及其模块docker\u container在nodejs中启动磁带单元测试容器。这很好,因为我不必让npm搞乱我的主机,我唯一的dev-box依赖是python和docker 我需要能够查看stdout以查看测试是否已运行。但是,Docker的--attach选项未在Docker\u容器中公开,我无法找到任何方法从容器的ansible启动中打印出stdout 我可以回到bash脚本来启动docker容器,但我不想 如何使用Ansible的docker\u容器模块显示容器

我正在使用Ansible及其模块
docker\u container
在nodejs中启动磁带单元测试容器。这很好,因为我不必让npm搞乱我的主机,我唯一的dev-box依赖是python和docker

我需要能够查看
stdout
以查看测试是否已运行。但是,Docker的
--attach
选项未在
Docker\u容器中公开
,我无法找到任何方法从容器的ansible启动中打印出
stdout

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


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

您可以使用此命令查看docker容器的日志<代码>docker日志containerName。要根据日志级别(如跟踪、信息等)打印日志,请尝试supervisord

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

下面的bash脚本有4行,Ansible playbook已经有25行了,由于并发性问题和输出格式问题(我相信我会找到更多)仍然不能完全正常工作

Ansible for docker仍然太新,不容易处理并发性问题,缺少docker功能等,可能只应该在您执行bash无法轻松处理的复杂操作(如处理远程服务器、重试等)时使用


这实际上适用于Ansible v2.5,方法是使用
detach
属性:

- 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\u facts.docker\u container.output
路径访问结果。

不是完整答案,因为ansible仍然会吞下所有的stdout,所以在任务
docker日志
docker\u容器
之间也存在竞争条件。通常,
docker\u日志
wins…在进一步的新闻中,ansible完全打破了Oreilly书中“ansible启动并运行”中记录的“等待”功能。哦,又回到了bash脚本。美化输出是死与任何解决方案,我可以想出,有可怕的比赛使用ansible,我必须重新编译的docker形象,每次反正。。。。在这个用例中使用ansible可能有点过头了。当我遇到类似的问题时,您的观点是正确的。我最后把这个搬到了詹金斯那里。让人负责安装。。然后调用脚本,以便更好地控制日志记录。对于ansible 2.10,请尝试调试:var=docker\u container\u output.container.output,甚至调试:var=docker\u container\u output
- 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"