gpt4 book ai didi

bash - 在 docker 入口点脚本中使用 exec 有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 12:37:20 26 4
gpt4 key购买 nike

以redis官方镜像为例:

https://github.com/docker-library/redis/blob/master/2.8/docker-entrypoint.sh

#!/bin/bash
set -e

if [ "$1" = 'redis-server' ]; then
chown -R redis .
exec gosu redis "$@"
fi

exec "$@"

为什么不像往常一样运行命令而不在它们之前执行 exec?

最佳答案

正如@Peter Lyons 所说,使用 exec 将替换父进程,而不是运行两个进程。

这在 Docker 中对于正确代理信号很重要。例如,如果 Redis 在没有 exec 的情况下启动,它不会在 docker stop 时收到 SIGTERM 并且不会有机会干净地关闭。在某些情况下,这可能会导致数据丢失或僵尸进程。

如果您确实启动了子进程(即不使用 exec),则父进程将负责处理和转发适当的信号。这是在容器中运行多个进程时最好使用 supervisord 或类似的原因之一,因为它会适本地转发信号。

关于bash - 在 docker 入口点脚本中使用 exec 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com