我被要求为Python程序构建一个映像,例如,如果我们创建3个Python程序,并为它们创建一个映像,如果我们运行该映像,基本上将创建一个容器,并将执行和退出,而对于第二个程序,将创建另一个容器。
这是通常会发生的事情。但这里我被告知,应该为所有程序创建一个容器,它应该持续处于运行状态,如果我们在Run命令中给出程序名称,它应该执行该程序,而不是其他两个程序,它应该根据我给出的命令启动和停止。
要做到这一点,我得到了一个提示/建议,我应该说,如果我创建一个入口点脚本并将其复制到docker文件中,它就会起作用。但不幸的是,当我在互联网上研究它时,入口点脚本可以在Linux上使用,但我在这里使用的是Windows。
1条答案
按热度按时间fae0ux8s1#
因此,首先要解释为什么容器在运行后会退出:容器与VM不同。Docker(或您选择的容器运行时)将检查容器上运行的内容。这是在
dockerfile
上的ENTRYPOINT
上定义的“正在运行的内容”。如果没有入口点,就不会运行任何东西,并且Docker会停止容器。或者,情况可能是某个程序运行,而容器在执行后停止。现在,Windows服务器基本映像没有入口点。如果您只要求运行容器,它将立即启动和停止。这对于像Web服务器这样的后台服务来说是一个问题,例如IIS。为了解决这一问题,微软创建了一项名为Service Monitor
的服务。如果您查找Microsoft生成的IIS图像的docker文件,您会注意到入口点是服务监视器,它反过来检查IIS服务的状态。如果IIS正在运行,服务监视器将继续运行,因此容器将无限期地运行。(这里是dockerfile:https://github.com/Microsoft/iis-docker/blob/main/windowsservercore-ltsc2022/Dockerfile)现在,对于您的情况,您需要的是在您的python容器上执行一项工作。请看mihai:https://hub.docker.com/_/python提供的链接说明
以下是他们的示例docker文件:
请注意最后一行。它不是一个入口点,这意味着python应用程序将运行并退出,这将停止容器。如果需要容器不确定地运行,要么利用服务监视器之类的东西(但需要在后台构建服务),要么创建自己的逻辑来保持某些东西运行。例如,无限循环。
这有帮助吗?