Docker 作为一种为我的容器运行多个入口点的方法

Docker 作为一种为我的容器运行多个入口点的方法,docker,containers,supervisord,docker-entrypoint,Docker,Containers,Supervisord,Docker Entrypoint,我需要在容器启动时运行脚本。(我的脚本从传入的部署环境变量创建一个json文件,供我的SPA应用程序用作配置。)我的容器基于 但是Dockerfile不允许有多个入口点,并且Nginx容器已经有了一个入口点(我假设我需要保留在那里,这样它才能正常工作) 我发现这个问题:。建议我使用主管来完成我需要的工作。我准备尝试一下,但其中一个只是使用了一个脚本(这是我在看到这个答案之前的计划)。在评论中,这个解决方案(使用脚本)引起了关注。它说: Supervisor可以说更好,因为它可以在进程死亡时重新启

我需要在容器启动时运行脚本。(我的脚本从传入的部署环境变量创建一个json文件,供我的SPA应用程序用作配置。)我的容器基于

但是Dockerfile不允许有多个入口点,并且Nginx容器已经有了一个入口点(我假设我需要保留在那里,这样它才能正常工作)

我发现这个问题:。建议我使用主管来完成我需要的工作。我准备尝试一下,但其中一个只是使用了一个脚本(这是我在看到这个答案之前的计划)。在评论中,这个解决方案(使用脚本)引起了关注。它说:

Supervisor可以说更好,因为它可以在进程死亡时重新启动进程,具有可配置的日志选项,可以通过RPC远程接收命令,等等

这里提到的“如果进程死亡,它可以重新启动进程”让我有点担心。我不知道那是什么意思。我不希望我的脚本在完成后重新运行。(它在容器启动时创建json文件,之后就不需要了。)

主管是否会让我的脚本反复运行?

或者我可以使用supervisor运行Nginx的
/docker entrypoint.sh
脚本和我的脚本吗?或者我应该把他们连在一起,不让主管插手

我的脚本从传入的部署环境变量创建一个json文件,供SPA应用程序用作配置

这在入口点脚本中很容易做到。您可以编写一个执行初始设置的脚本,然后启动主进程(对于您的特定情况,有一个“但是”):

#/垃圾箱/垃圾箱
/app/build-config-json-o/etc/nginx/config.json#
#--更多--
我的容器是基于。。。Nginx容器已经有了[入口点]

通常,您会使用
exec“$@”
结束entrypoint脚本以启动主容器进程。在这种情况下,您可以启动原始入口点脚本

#。。。第一次安装的其余部分。。。
exec/docker-entrypoint.sh“$@”
在Dockerfile中,您可以指定新的
入口点
,但在指定时,您还需要重复原始的
CMD
。这意味着这种方法通常需要一些关于底层图像的知识;其docker文件非常理想,但您可以从
docker历史记录
docker inspect
中找到
入口点
CMD

ENTRYPOINT[“/wrapped ENTRYPOINT.sh”]
CMD[“nginx”,“-g”,“守护进程关闭;”]
如果可能的话,我会避开上司。Docker已经为您提供了重启流程和管理日志的选项。仅在启动时容器初始化不需要这样做

我的脚本从传入的部署环境变量创建一个json文件,供SPA应用程序用作配置

这在入口点脚本中很容易做到。您可以编写一个执行初始设置的脚本,然后启动主进程(对于您的特定情况,有一个“但是”):

#/垃圾箱/垃圾箱
/app/build-config-json-o/etc/nginx/config.json#
#--更多--
我的容器是基于。。。Nginx容器已经有了[入口点]

通常,您会使用
exec“$@”
结束entrypoint脚本以启动主容器进程。在这种情况下,您可以启动原始入口点脚本

#。。。第一次安装的其余部分。。。
exec/docker-entrypoint.sh“$@”
在Dockerfile中,您可以指定新的
入口点
,但在指定时,您还需要重复原始的
CMD
。这意味着这种方法通常需要一些关于底层图像的知识;其docker文件非常理想,但您可以从
docker历史记录
docker inspect
中找到
入口点
CMD

ENTRYPOINT[“/wrapped ENTRYPOINT.sh”]
CMD[“nginx”,“-g”,“守护进程关闭;”]
如果可能的话,我会避开上司。Docker已经为您提供了重启流程和管理日志的选项。仅在启动时容器初始化不需要这样做

我的脚本从传入的部署环境变量创建一个json文件,供SPA应用程序用作配置。我的容器基于

如果查看链接到的docker文件,将启动一个
docker entrypoint.sh
脚本作为
entrypoint
。位于同一GitHub存储库的同一目录中,并运行

find”/docker entrypoint.d/“-follow-type f-print | sort-n |而read-rf;做
大写“$f”
*(上海)
如果[-x“$f”];然后
echo>&3“$0:启动$f”;
“$f”
...
fi
;;
以撒
完成
因此,对于这个特定的基本映像,如果您将初始化脚本放入
/docker entrypoint.d
,它被命名为
*.sh
,并且是可执行的,那么现有的
entrypoint
将在容器启动时为您运行它;你不必重写任何东西

来自nginx:1.19的

复制build-config-json/docker-entrypoint.d/30-build-config-json.sh
运行chmod+x/docker-entrypoint.d/30-build-config-json.sh
#文件结束
默认打包还包括将在
/etc/nginx/templates
中的任何
*.template
文件上运行
envsubt
,以在
/etc/nginx/conf.d
中生成相应的配置文件(如果启动序列恰好需要)

我的脚本从传入的部署环境变量创建一个json文件,供SPA应用程序用作配置。我的容器基于

如果你看