如何在windows上编写入口点脚本



我被要求为python程序构建一个映像,例如,如果我们创建3个python程序并为它们创建一个映像。如果我们运行该映像,基本上会创建一个容器,执行并退出,第二个程序会创建另一个容器。

这是通常会发生的事情。但在这里,我被告知应该为所有程序创建一个容器,它应该持续处于运行状态,如果我们在run命令中给出程序名称,它应该执行该程序,而不是其他两个程序,它应该根据我给出的命令启动和停止。

为了实现这一点,我得到了一个提示/建议,我应该说,如果我创建一个入口点脚本并将其复制到docker文件中,它就会工作。但不幸的是,当我在互联网上研究它时,入口点脚本可以用于linux,但我在这里使用的是windows。

因此,首先解释容器在运行后退出的原因:容器不像VM。Docker(或您选择的容器运行时(将检查容器上运行的内容。这个";正在运行的内容";在您的dockerfile上的ENTRYPOINT上定义。如果你没有入口点,就没有任何东西在运行,Docker就会停止容器。或者可能是某个东西运行了,容器在执行后停止了。现在,Windows Server基本映像没有入口点。如果您只是要求运行容器,它将立即启动和停止。对于像web服务器这样的后台服务(例如IIS(来说,这是一个问题。为了解决这个问题,微软创建了一个名为Service Monitor的服务。如果您查找Microsoft生成的IIS映像的docker文件,您会注意到入口点是服务监视器,它反过来检查IIS服务的状态。如果IIS正在运行,服务监视器将继续运行,因此容器将无限期地保持运行。(这是码头文件:https://github.com/Microsoft/iis-docker/blob/main/windowsservercore-ltsc2022/Dockerfile)

现在,对于您的案例,您需要的是python容器上的作业。看看米海提供的链接上的描述:https://hub.docker.com/_/python

这是他们的示例docker文件:

FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./your-daemon-or-script.py" ]

记下最后一行。这不是一个入口点,这意味着python应用程序将运行并退出,这将停止容器。如果您需要容器不稳定地运行,那么您可以利用服务监视器之类的东西(但需要在后台构建服务(,或者创建自己的逻辑来保持某些东西的运行。例如,中篇循环。

这有帮助吗?

最新更新