Я играл со способами перезапуска контейнера. Я нашел для себя следующее решение:
Dockerfile:
...
ENTRYPOINT [ "/app/bootstrap.sh" ]
/app/bootstrap.sh:
#!/bin/bash
/app/startWhatEverYouActuallyWantToStart.sh &
tail -f /dev/null
Каждый раз, когда я хочу перезапустить контейнер, я убиваю процесс с помощью tail -f /dev/null
, который нахожу с помощью
kill -TERM `ps --ppid 1 | grep tail | grep -v -e grep | awk '{print $1}'`
После этой команды все процессы, кроме одного с PID==1
, будут убиты, а точка входа, в моем случае bootstrap.sh
, будет выполнена (снова).
Это для частичного перезапуска - на самом деле это не перезапуск, но, в конце концов, он делает то, что вы хотите. Что касается части с ограничением перезапуска контейнера с именем container-test
, вы можете передать имя контейнера рассматриваемому контейнеру (так как в противном случае имя контейнера было бы недоступно внутри контейнера), а затем вы можете решить, делать ли вышеуказанное kill
. В вашем deployment.yaml
это будет примерно так:
env:
- name: YOUR_CONTAINER_NAME
value: container-test
/app/startWhatEverYouActuallyWantToStart.sh:
#!/bin/bash
...
CONDITION_TO_RESTART=0
...
if [ "$YOUR_CONTAINER_NAME" == "container-test" -a $CONDITION_TO_RESTART -eq 1 ]; then
kill -TERM `ps --ppid 1 | grep tail | grep -v -e grep | awk '{print $1}'`
fi
person
Michael
schedule
13.02.2021