gpt4 book ai didi

docker - 如果我们在entrypoint.sh 中引导应用程序,应用程序是否会以PID 1 运行并且会收到信号吗?

转载 作者:行者123 更新时间:2023-12-02 05:49:27 24 4
gpt4 key购买 nike

启动服务是一个很好的做法

CMD ["/go/bin/myapp"]

而不是

CMD /go/bin/myapp

在第一种方式中,SIGTERM 由应用程序捕获,而在第二种方式中,它们由底层 /bin/sh 脚本捕获,该脚本不会将它们转发到服务。我从https://forums.docker.com/t/docker-run-cannot-be-killed-with-ctrl-c/13108/2学到了这一点.

现在我想知道 CMD ["..."] 是否完全等同于将 ... 放入 /entrypoint.sh > 脚本并调用 CMD ["/entrypoint.sh"]?现在子应用程序也会作为 PID 1 运行并因此接收所有信号吗?

作为一个具体示例,我想创建一个脚本:

envsubst < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf
&&
nginx -g 'daemon off;'

并在我的Dockerfile末尾调用CMD ["/entrypoint.sh"]。这样安全吗?尽管脚本中有多个命令(envsubstngingx),nginx 仍会以 PID 1 运行吗?

这件事让我很困惑,我正在尝试弄清楚何时以及何时不使用 tini ( https://github.com/krallin/tini )。

最佳答案

这是我尝试遵循的MySQL 5.7 Dockerfile 确实...但是使用 Nginx 镜像。

Dockerfile:

FROM nginx:latest
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod 777 /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker-entrypoint.sh:

#!/bin/bash
set -e

echo "preparing..."

exec "$@"

这个想法是在docker-entrypoint.sh内做任何需要的准备工作。脚本和 exec "$@"然后将信号传递给CMD 。 (这意味着您必须在 envsubst < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf 中使用 docker-entrypoint.sh )

<小时/>

相关示例链接至Dockerfile文档:If you need to write a starter script for a single executable, you can ensure that the final executable receives the Unix signals by using exec and gosu commands...

关于docker - 如果我们在entrypoint.sh 中引导应用程序,应用程序是否会以PID 1 运行并且会收到信号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48681357/

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