我正在使用Ansible及其模块docker_container
在nodejs中启动磁带单元测试容器。这很好,因为我没有让npm搞砸我的主机,我唯一的dev框依赖是python和docker。
我需要能够看到stdout
才能看到测试已经运行。但是,Docker的--attach
选项未在docker_container
中公开,我找不到任何方法可以从容器的ansible启动中打印stdout
。
我可以回到bash脚本来启动docker容器,但我不想......
如何使用Ansible的docker_container模块显示容器的标准输出?
答案 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。