我如何强制使用Ansible的“docker_container”模块删除docker集装箱?
引入pipe理员后,我在从docker主机中移除容器时遇到问题 – https://github.com/google/cadvisor/issues/771
我有大量的Ansible(2.2.1.0)脚本,我用这些docker_container模块来安装服务容器。 很多时候这些脚本都想删除一个容器,但是由于上面提到的问题,它们都失败了。
我可以很轻易地在这些docker主机上强制执行docker container:
docker rm container_name -fv
所以我期望在docker_container模块( docker_container模块文档 )中提供的force_kill选项应该能够执行相同的操作:
- name: Delete docker containers docker_container: name: "container_name" force_kill: true keep_volumes: false state: absent
但脚本总是失败。 我不知道这个选项的目的是什么,如果它不能强行杀死它的话。 所有我的脚本甚至在启用force_kill后都失败了,我需要知道如何确保这个选项按预期工作。
更新:我现在明白了force_kill选项正在发送docker kill信号。 我已经更新了这个问题,以更好地反映我真正想要达到的目标。
我认为force_kill
发送一个杀手信号作为docker工杀死
容器内的主要进程将被发送SIGKILL,或者用选项–signal指定的任何信号。
我会检查图像的Dockerfile中的CMD和/或ENTRYPOINT(如果您使用它),因为
shell程序中的ENTRYPOINT和CMD作为/ bin / sh -c的子命令运行,它不传递信号。 这意味着可执行文件不是容器的PID 1,并且不接收Unix信号。
CMD ["/init.sh"] # exec form CMD /init.sh # shell form
不知道这是你的问题的原因,但可能是壳体forms的CMD不会将信号转发到您的命令。
至于Dominique Burton的博客
如果您希望Docker将信号转发到(子)进程,请始终使用exec表单。 这不仅对发送自定义信号到Docker容器很重要,正确停止(即docker stop)容器也很重要。