Docker容器在启动时在requirements.txt中安装新包

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

我希望我的docker容器在启动时安装添加到requirements.txt的软件包 - 如果有任何更改。

鉴于Dockerfile看起来如下

FROM python 

WORKDIR /opt/code

COPY ./requirements.txt /opt/code/requirements.txt

...

RUN pip --no-cache-dir install --upgrade -r requirements.txt

...

假设这个requirements.txt文件是卷映射的,所以它从容器外部可见,我希望能够通过更改requirements.txt然后调用docker restart my_container来管理包。请注意,我不希望升级旧包,只安装新包。

作为奖励,如果我只能安装新软件包的新软件包的名称(避免“已安装”的消息),那么我可以写入日志文件会很棒

python docker
1个回答
2
投票

您可以在运行应用程序之前创建一个执行此操作的入口点脚本。我可能使用compose文件而不是直接在图像中部署它,这样你就不会在生产中有动态更新容器。

这是一个示例入口点脚本:

#!/bin/sh
# if a command is not provided, set a default command
if [ $# -eq 0 ]; then
  set -- python app.py
fi
# update to new requirements on each container start
pip --no-cache-dir install --upgrade -r requirements.txt
# use exec to replace pid 1 with the command (e.g. python app.py)
exec "$@"

Dockerfile会添加这个,但我不会更改当前命令:

COPY entrypoint-dev.sh /

然后在您的开发撰写文件中,您可以使用该入口点:

version: '3'
services:
  app:
    image: app:dev
    entrypoint:
    - /entrypoint-dev.sh
    volumes:
    - .:/opt/code
© www.soinside.com 2019 - 2024. All rights reserved.