python - 多阶段 Dockerfile Python
问题描述
所以我在这里遇到了麻烦,我已经部署了我的多级 dockerfile python:3.8-slim-buster
,但是我无法访问这个 URL?我的 Dockerfile 有问题吗?
# Build Image
FROM python:3.8-slim-buster as builder
RUN apt-get update --fix-missing
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libgl1-mesa-dev python3-pip git
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip3 install -U setuptools
RUN pip3 install --upgrade pip
RUN pip3 install -r ./requirements.txt
COPY . /usr/src/app
# Production Image
FROM python:3.8-slim-buster as app
COPY --from=builder /usr/src/app /usr/src/app
WORKDIR /usr/src/app
ENTRYPOINT gunicorn --bind 0.0.0.0:1500 --workers 1 --threads 8 main:app --worker-class uvicorn.workers.UvicornH11Worker --preload --timeout 60 --worker-tmp-dir /dev/shm
这就是我运行 Docker 的方式:
sudo docker build -t priceengine .
sudo docker run -dp 1500:1500 priceengine
sudo docker start 2d7f96017801
那么,我# Production Image
是对的吗?
解决方案
我假设您的应用程序依赖于已安装的软件包,如果是这样,它将不适用于构建的多阶段。多阶段构建仅有助于避免将构建时依赖项添加到最终映像。在这里,您需要运行时的apt
包和requirements.txt
包(ENTRYPOINT
)。只需为此使用普通的 Dockerfile(无多级)。
推荐阅读
- python - Lists accept iterable objects as inputs. However, when the input is an int or float, e.g. list(1), this is not accepted. Why?
- react-native - 如何在odoo消息中添加附件ID?
- python - 如何使用 pandas 数据框有效地更新 mysql 表?
- swift - (逗号,分隔,属性)的唯一性约束如何在 CoreData 中与 Swift 一起使用?
- tensorflow - 如何在 Tensorflow 中正确使用 tf.metrics.mean_iou 在 Tensorboard 上显示混淆矩阵?
- java-8 - Web3J 自动生成 Java 包装器
- python - 根据列排列/排序熊猫数据框数据中的数据
- python - 根据条件连接多个不相等的数据帧
- apple-watch - Apple Watch屏幕左上角怎么放文字
- php - 在另一个命名空间中自动加载命名空间时出错