Skip to main content
 首页 » 编程设计

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

2024年09月07日30duanxz

我希望我的 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 重启 my_container。 注意,我不希望升级旧包,只希望安装新包。

作为奖励,如果我可以在安装新包时仅写入新安装包的名称(避免“已安装”消息)写入日志文件,那就太好了

请您参考如下方法:

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

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

#!/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