在 jenkins 中部署 django 应用程序时为什么 docker 在构建映像时不运行应用程序

问题描述 投票:0回答:1

我是 CICD 的新手,试图了解 docker。

在使用调用 dockerfile 构建 docker 镜像的 jenkins 管道部署 Django 应用程序时。 dockerfile 调用 runner.sh,其中包含以下代码行:

uwsgi --http "0.0.0.0:${PORT}" --module my_proj.wsgi --master --processes 4 --threads 2

一切正常,但我很想知道为什么当此映像在主机服务器上运行时,此代码在构建 docker 映像和运行应用程序时不运行应用程序。

在这种情况下,我尝试在 dockerfile 中运行应用程序,同时部署 jenkins 管道在运行应用程序时卡住并保持卡住,因为应用程序将在构建图像时继续运行。

django docker jenkins uwsgi cicd
1个回答
0
投票

,但我很想知道为什么当此映像在主机服务器上运行时,此代码在构建 docker 映像和运行应用程序时不运行应用程序。

我假设

runner.sh
在您的docker镜像中被指向
ENTRYPOINT
。 ENTRYPOINT 的目的是在 docker 镜像的运行状态下执行命令/脚本。

那么问题来了,为什么是run状态下执行,而不是build状态。因为这条命令与搭建docker环境无关。相反,此命令运行您的应用程序。这个过程不会停止,直到它被明确强制停止(比如使用 ctrl+c)。因此,如果您将此命令置于构建状态,即在 Dockerfile 中使用

RUN ...
,它将不会完成构建,因为该命令一直在运行。

在这种情况下,我尝试在 dockerfile 中运行应用程序,同时部署 jenkins 管道在运行应用程序时卡住并保持卡住,因为应用程序将在构建图像时继续运行。

关于这一点,你的 Jenkins 管道的目的是构建 docker 镜像,将镜像二进制文件发送到部署环境,该镜像将处于可执行状态。因此,将此命令置于 dockerfile 的构建状态不是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.