如何使用 buildpack 构建非 Web python 应用程序映像?

How to build non-web python application image with buildpack?

我是容器的新手,下面的问题可能听起来很愚蠢。

其实有两个问题。

  1. 我有一个非 Web python 应用程序在 VScode 中经过全面测试,没有任何错误,然后我使用下面的 Dockerfile 在本地构建它。

     FROM python:3.8-slim
    
     WORKDIR /app
    
     COPY requirements.txt ./
    
     RUN pip install --no-cache-dir -r requirements.txt
    
     COPY . .
    
     CMD ["python", "./mycode.py"]
    

已成功构建图像,但 运行ning 以 TypeError 结束。我已确保 requirements.txt 与我的项目环境具有相同的依赖性。错误消息是“错误的元组索引”,这让我不知道问题可能来自经过全面测试的代码。我被困在这里有一种奇怪的感觉。

  1. 然后我尝试使用 Procfile 构建包:worker: python mycode.py 图像已成功构建,但 docker 运行 无法启动应用程序并出现以下错误。我不知道除了“worker:”之外还有什么可以在 Procfile 中启动非 Web python 应用程序。又卡住了!

ERROR: failed to launch: determine start command: when there is no default process a command is required

我搜索过,但都是关于 Procfile 中带有“web:”的 Web 应用程序。对这两个问题的任何帮助将不胜感激。

启动容器时,您需要将 worker 进程类型传递给它,如下所示:

$ docker run -it myapp worker

那么它应该 运行 您添加到 Procfile 的命令。

其他一些事情:

  • 确保您使用的是 heroku/python buildpack 或其他包含 Procfile 检测的 buildpack。
  • 在构建输出中确认 worker 进程类型已创建
  • 如果您不想将 worker 添加到您的启动命令,您 可以 将您的命令作为 web: 进程类型。执行 运行 网络应用程序
  • web: 进程没有任何问题

感谢@codefinger 提醒。经过多次试验,我终于使用以下命令启动了我的应用程序:

    docker run -it --name container_name image_name python mycode.py

事实上 docker 运行 命令的格式为:

docker run [options] image [command] [arg..]

我怀疑即使是 buildpack 映像也没有工作进程,仍然可以使用“命令”选项来启动您的应用程序。

然而,成功地 运行 构建由 buildpack 构建的图像而没有任何错误让我感到越来越奇怪。
相同的代码和相同的 requirement.txt 文件,没有任何改变!为什么 docker build 构建的图像给我一个 TypeError?太奇怪了