我如何强制使用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)容器也很重要。

Interesting Posts