如何使用 buildpack 构建非 Web python 应用程序映像?
How to build non-web python application image with buildpack?
我是容器的新手,下面的问题可能听起来很愚蠢。
其实有两个问题。
我有一个非 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 与我的项目环境具有相同的依赖性。错误消息是“错误的元组索引”,这让我不知道问题可能来自经过全面测试的代码。我被困在这里有一种奇怪的感觉。
- 然后我尝试使用 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?太奇怪了
我是容器的新手,下面的问题可能听起来很愚蠢。
其实有两个问题。
我有一个非 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 与我的项目环境具有相同的依赖性。错误消息是“错误的元组索引”,这让我不知道问题可能来自经过全面测试的代码。我被困在这里有一种奇怪的感觉。
- 然后我尝试使用 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?太奇怪了