即使杀死后Docker仍在后台继续运行进程

时间:2019-05-16 14:03:53

标签: python docker subprocess devops

我正在使用docker运行python脚本,该脚本使用subprocess模块在​​终端中运行一些命令,

在使用docker运行脚本之后,如果我使用ctrl+ckill命令杀死该进程,则在我的终端进程中被杀死,但是该进程继续在后台运行并创建日志好吧。

我尝试直接在系统中运行脚本,并且脚本运行良好,并且在杀死脚本后就停止了运行,但是当我使用docker运行时,即使在kill -9 process_id之后,脚本仍继续在后台运行。

用于模拟问题的示例代码。

import getpass
import subprocess
import os
import signal, time

print('python user: ', getpass.getuser())

def test(i):
    try:
        drop_temp_tbl = subprocess.Popen(f'echo "test">>test.txt;sleep 40; echo "test6{i}">>test.txt;',
                                         shell=True,
                                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        (drop_temp_tbl_stdout, drop_temp_tbl_stderr) = drop_temp_tbl.communicate()
        print('_subprocess_user,', drop_temp_tbl_stdout, '\n', drop_temp_tbl_stderr)
    except Exception as e:
        print('terminate ',os.killpg(os.getpgid(drop_temp_tbl.pid), signal.SIGTERM) )
        print('ERROR', e)


for i in range(2):
    test(i)

Docker运行命令

docker run -i --rm -v `pwd`:/code ${docker_id} python_script.py

Dockerfile

FROM ubuntu:latest


RUN apt-get update && \
  apt-get install -yf software-properties-common

RUN  apt-get -yq update && \
     apt-get -yqq install \
     openssh-client

COPY ./docker_requirement ./
RUN pip install --no-cache-dir -r docker_requirement

RUN groupadd --gid 1000 app
RUN useradd --uid 1000 --gid app --home /app app

USER 1000
ADD . /code
WORKDIR /code
ENTRYPOINT ["python3"]

对于上面通过docker运行的示例,即使在test.txt之后,p也会继续附加kill -9 process_id

0 个答案:

没有答案