我在docker容器中有一个入口点脚本,如下所示:
#!/bin/bash
echo starting up
function shut_down() {
echo shutting down
pid=$(ps -e | grep myapp | awk '{print $1}')
kill -SIGTERM $pid
exit
}
trap "shut_down" SIGKILL SIGTERM SIGHUP SIGINT EXIT
/opt/myapp
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何通过docker stop在容器上运行来捕获发送的信号.以交互方式运行时,a ctrl+c将按预期触发它,但docker stop命令只等待10秒超时,并在不进入shut_down函数的情况下退出
如何捕获docker stopbash 发送的信号进行一些清理?
小智 12
老问题,但这将做的伎俩:
#!/bin/bash
echo starting up
exec /opt/myapp
Run Code Online (Sandbox Code Playgroud)
详情请看:http://www.techbar.me/stopping-docker-containers-gracefully/
看看这个,可能会鼓舞人心:-)
更新:
@ nick-humrich这里是我的lamer副本和过去(功劳归原作者https://github.com/lgierth)
#!/bin/bash
function ensure_started_container {
exists=`docker ps -q | grep $1`
if [ "$?" = "0" ] ; then
echo "[docker-exec] skipping docker start, already started"
else
output=`docker start "$1"`
echo "[docker start] $output"
fi
running=1
}
function setup_signals {
cid="$1"; shift
handler="$1"; shift
for sig; do
trap "$handler '$cid' '$sig'" "$sig"
done
}
function handle_signal {
echo "[docker-exec] received $2"
case "$2" in
SIGINT)
output=`docker stop -t 5 "$1"`
echo "[docker stop] $output"
running=0
;;
SIGTERM)
output=`docker stop -t 5 "$1"`
echo "[docker stop] $output"
running=0
;;
SIGHUP)
output=`docker restart -t 5 "$1"`
echo "[docker restart] $output"
# restart logging
docker attach "$1" &
kill "$logger_pid" 2> /dev/null
logger_pid="$!"
;;
esac
}
running=0
setup_signals "$1" "handle_signal" SIGINT SIGTERM SIGHUP
ensure_started_container "$1"
docker attach "$1" &
logger_pid="$!"
while true; do
if [ "$running" = "1" ]; then
sleep 1
else
break
fi
done
exit_code=`docker wait "$1"`
exit "$exit_code"
Run Code Online (Sandbox Code Playgroud)
从 Docker 1.9 开始,您可以使用STOPSIGNAL以下指令Dockerfile:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n\nSTOPSIGNAL signal\n设置
\nSTOPSIGNAL将发送到容器以退出的系统调用信号。该信号可以是与 kernel\xe2\x80\x99s 系统调用表中的位置匹配的有效无符号数字(例如 9),也可以是 SIGNAME 格式的信号名称(例如 SIGKILL)。
来源: https: //docs.docker.com/engine/reference/builder/#stopsignal
\n| 归档时间: |
|
| 查看次数: |
9306 次 |
| 最近记录: |