Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker容器“启动后”活动_Docker - Fatal编程技术网

docker容器“启动后”活动

docker容器“启动后”活动,docker,Docker,我是docker的新手,我开始构建、部署和维护遥测服务,如grafana、prometheus等。。。。我遇到的一件事是,我需要用一些默认/预配置的设置启动grafana仪表板、用户、组织、数据源等等。。。。Grafana允许在其配置文件中进行一些启动配置,但不允许使用其所有功能用户、组织等。。。。除此之外,如果我没有使用docker,我将使用ansible脚本来配置grafana不受支持的部分。但是,当我使用允许的启动配置构建自定义grafana映像,然后启动该映像的grafana容器时,是否

我是docker的新手,我开始构建、部署和维护遥测服务,如grafana、prometheus等。。。。我遇到的一件事是,我需要用一些默认/预配置的设置启动grafana仪表板、用户、组织、数据源等等。。。。Grafana允许在其配置文件中进行一些启动配置,但不允许使用其所有功能用户、组织等。。。。除此之外,如果我没有使用docker,我将使用ansible脚本来配置grafana不受支持的部分。但是,当我使用允许的启动配置构建自定义grafana映像,然后启动该映像的grafana容器时,是否有方法在docker文件中指定启动后命令或步骤?我把它想象成每次部署我的映像容器时都会遇到一些配置该容器的步骤问题。
有什么建议吗?我还需要使用ansible或其他类似工具来管理它吗?

这比听起来更复杂。继续使用Ansible在启动后对其进行配置可能是一个很好的折衷方案,既要简单明了,又要使用已有的代码,还要使用标准Docker工具和图像

如果这是针对测试环境,一种可能是保留Grafana的配置和数据目录的引用副本。您必须将这些图片与Docker图片分开分发

mkdir grafana 码头工人赛跑\ -v$PWD/grafana/config:/etc/grafana\ -v$PWD/grafana/data:/var/lib/grafana\ ... \ 格拉法纳 ... tar cvzf grafana.tar.gz grafana 获得tar文件后,可以从已知配置重新启动系统:

tar xvzf grafana.tar.gz 码头工人赛跑\ -v$PWD/grafana/config:/etc/grafana\ -v$PWD/grafana/data:/var/lib/grafana\ ... \ 格拉法纳 一些标准Docker Hub数据库映像能够通过入口点脚本进行首次配置;我会参考这里的。基本技术包括:

确定用于启动容器的命令是否为,以及。 ,作为后台进程,记录其pid。 使服务器变得可用。 实际执行第一次初始化。 作为后台进程启动的服务器。 继续正常运行以真正启动服务器。 这里的基本约束是,您希望在完成所有操作后,服务器进程是容器中运行的唯一对象。这意味着docker stop等命令将直接向服务器发送信号,如果服务器出现故障,则是主容器进程,从而导致容器退出。一旦entrypoint脚本通过execimg将其自身替换为服务器作为主容器进程,您就不能再进行任何启动后工作了。这导致启动服务器的临时副本以执行初始化工作的顺序

完成此初始化工作后,相关内容通常存储在持久化数据目录或外部数据库中


因此,问题有一个常见的快捷方式,即在后台启动服务器进程,然后使用像tail-f/dev/null这样的东西作为实际的主容器进程。这意味着docker stop将向tail进程发出信号,但不会告诉服务器它即将关闭;这还意味着,如果服务器确实出现故障,因为tail进程仍在运行,容器将不会退出。我不想走这条捷径。

谢谢你的回复。我在考虑类似的事情,但试图看看docker是否有一些内置的功能,我可以指定这一点。我想它不在那里。这将是一个很酷的功能。我想我可以用谷歌搜索这个,但是你知道如果工具dockerswarm/k8/。。。你有这个能力吗?我认为这类似于能够做启动后测试或类似的事情?原则上是Kubernetes,但不能保证钩子会在容器入口点之前执行;您仍然需要手动检查服务是否处于活动状态。Kubernetes还增加了复杂性,即通常存在多个服务副本,因此单独启动的作业或类似于Helm post start hook(通常也是一个作业)的东西可以更好地确保首次安装只完成一次。