Como matar um processo no qual o container foi iniciado

4

Eu tenho um contêiner no qual gostaria de matar um processo que foi usado para iniciar o contêiner. A última linha do Dockerfile é CMD ["python", "app.py"]

Meu motivo para fazer isso, em vez de apenas interromper o contêiner, é que desejo matar o processo, exec bash no contêiner, alterar alguns arquivos e, em seguida, iniciar o processo novamente. Se eu matar o contêiner inteiro, não tenho como bash e alterar os arquivos.

Se existe uma maneira melhor de alcançar o que eu estou procurando, então eu prefiro isso. Eu sou novo no docker, então posso estar perdendo alguma coisa.

Isso é o que eu fiz, o que não funciona.

➜  $ docker top mycontainer
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1447                1226                0                   01:21               ?                   00:00:04            python app.py

➜  $ docker exec -it mycontainer ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.5 20.6 1225304 210344 ?      Ssl  01:21   0:04 python app.py
root        61  0.0  0.2  15572  2208 ?        Rs+  01:35   0:00 ps -aux

➜  $ docker exec -it mycontainer kill -9 1
➜  $ docker top mycontainer
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1447                1226                0                   01:21               ?                   00:00:04            python app.py
    
por Anthony 25.03.2016 / 02:52

1 resposta

1

Eu tive um problema semelhante. Não consegui matar o processo 1. Então eu tive que executar outro processo primeiro. Eu escolhi usar um processo bash, com um loop de reinicialização.

Estou usando o Docker-compose, então o arquivo de comando do meu contêiner acabou parecendo com algo parecido com isto:

bash -c "echo 'Starting'; while true; do python -u app.py; sleep 4; echo 'restarting'; done"

Semelhante é possível ao usar o Docker diretamente.

    
por 30.01.2018 / 13:49

Tags