• Docker容器子进程僵尸化


    简介:

      线上Python脚本通过paramiko库去连接容器然后远程执行命令, 命令类似nohup bash /test.sh & , 竟然产生了一个bash 僵尸进程.

    root         125       1  0 16:30 ?        00:00:00 [bash] <defunct>

    问题分析:

      原因主要出在容器内1号进程上,Python远程调用的子进程执行完成后会等待父进程(1号)收割,但是1号进程是mysqld,没有能力也不会去处理子进程。解决方法就是容器加个init进程。详细解答看下面的文章。

     GitHub有篇文章分析的特别好,转发如下:

     https://gist.github.com/snakevil/0b47072fcb626b87f4bd4ab80f7d8946

    解决方案:

      方法1:重新打包容器,在dockerfile添加

    # Add Tini
    ENV TINI_VERSION v0.19.0
    ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
    RUN chmod +x /tini
    
    ENTRYPOINT ["/tini", "--", "/docker-entrypoint.sh"]

     

      方法2:如果是docker直接运行,可以增加--init参数

    docker run --init 

    附上几个有用的链接:

    tini github地址: https://github.com/krallin/tini

    类似init解决方法:https://ahmet.im/blog/minimal-init-process-for-containers/

    tini优点分析:https://ahmet.im/blog/minimal-init-process-for-containers/

      

  • 相关阅读:
    JavaScript (三) js的基本语法
    JavaScript (二) js的基本语法
    JavaScript (一) js的介绍及基本语法变量
    Spring事务管理
    python静态方法、类方法
    python多继承
    python面向对象
    python模块(4)
    python模块(3)
    python模块(2)
  • 原文地址:https://www.cnblogs.com/9527l/p/15434501.html
Copyright © 2020-2023  润新知