gpt4 book ai didi

docker - 如何使用 Ansible 的 'docker_container' 模块强制删除 docker 容器?

转载 作者:行者123 更新时间:2023-12-01 14:46:44 28 4
gpt4 key购买 nike

引入 cadvisor - https://github.com/google/cadvisor/issues/771 后,我在从 docker 主机中删除容器时遇到问题

我有大量 Ansible (2.2.1.0) 脚本,用于在这些 docker 主机上安装我的服务容器,并且它们在内部使用 docker_container 模块。很多时候,这些脚本想要删除容器,但由于上述问题,它们失败了。

我可以轻松地在这些 docker 主机上强制终止 docker 容器:

docker rm container_name -fv

所以我希望 docker_container 模块( docker_container module docs )中提供的 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 信号。我已经更新了这个问题,以更好地反射(reflect)我真正想要实现的目标。

最佳答案

我认为 force_kill发送终止信号为 docker kill所以

The main process inside the container will be sent SIGKILL, or any signal specified with option --signal.



我会在图像的 Dockerfile 中检查 CMD 和/或 ENTRYPOINT(如果你使用它的话),因为

ENTRYPOINT and CMD in the shell form run as a subcommand of /bin/sh -c, which does not pass signals. This means that the executable is not the container’s PID 1 and does not receive Unix signals.


CMD ["/init.sh"] # exec form
CMD /init.sh # shell form

不确定这是您问题的原因,但可能是外壳形式的 CMD 不会将信号转发给您的命令。

至于 Dominique Burton's blog

Always use the exec form if you want Docker to forward signals to your (sub-)process. This is not only important for sending custom signals to a Docker container, it’s also important to properly stop (i.e. docker stop) a container.

关于docker - 如何使用 Ansible 的 'docker_container' 模块强制删除 docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43273581/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com