zoukankan      html  css  js  c++  java
  • 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/

      

  • 相关阅读:
    HDU.2087 剪花布条
    一个acm过来人的心得
    一个acm过来人的心得
    HDU.2190 悼念512汶川大地震遇难同胞——重建希望小学
    HDOJ.2501 Tiling_easy version
    HDOJ.2501 Tiling_easy version
    HDU
    poj3216 Prime Path(BFS)
    poj1426 Find The Multiple (DFS)
    Rikka with Nickname (简单题)
  • 原文地址:https://www.cnblogs.com/9527l/p/15434501.html
Copyright © 2011-2022 走看看