Tengo problemas para eliminar contenedores de mi docker host después de instalar cadvisor: https://github.com/google/cadvisor/issues/771
Tengo una gran cantidad de secuencias de comandos de Ansible (2.2.1.0) que utilizo para instalar mis contenedores de servicios en estos hosts docker e internamente usan el módulo docker_container. Muchas veces, estos scripts querrían eliminar un contenedor, pero debido al problema mencionado anteriormente, fallan.
Puedo forzar la eliminación del contenedor docker en estos hosts docker fácilmente:
docker rm container_name -fvEntonces, esperaría que la opción force_kill provista en el módulo docker_container (docs del módulo docker_container ) debería poder hacer lo mismo:
- name: Delete docker containers docker_container: name: "container_name" force_kill: true keep_volumes: false state: absentPero el guión falla siempre. No sé cuál es el propósito de esta opción si no es capaz de forzarlo a matarlo. Todos mis scripts están fallando incluso después de habilitar force_kill y necesito saber cómo asegurarme de que esta opción funcione según lo previsto.
Actualización: ahora entiendo que la opción force_kill está enviando la señal de eliminación de la ventana acoplable. He actualizado la pregunta para reflejar mejor lo que realmente quiero lograr.
Creo que force_kill envía una señal de muerte como docker kill , así que
El proceso principal dentro del contenedor se enviará SIGKILL, o cualquier señal especificada con la opción --signal.
Verificaría CMD y/o ENTRYPOINT en el Dockerfile de la imagen (si lo usó) porque
ENTRYPOINT y CMD en el formulario de shell se ejecutan como un subcomando de /bin/sh -c, que no pasa señales. Esto significa que el ejecutable no es el PID 1 del contenedor y no recibe señales de Unix.
CMD ["/init.sh"] # exec form CMD /init.sh # shell formNo estoy seguro de que esta sea la razón de su problema, pero puede ser que un CMD en forma de shell no reenvíe la señal a su comando.
En cuanto al blog de Dominique Burton
Utilice siempre el formulario exec si desea que Docker envíe señales a su (sub)proceso. Esto no solo es importante para enviar señales personalizadas a un contenedor Docker, sino que también es importante para detener correctamente (es decir, detener Docker) un contenedor.