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

时间:2018-09-01 12:12:25

标签: python docker

我希望我的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来管理软件包。 请注意,我不希望升级旧软件包,而只安装新软件包。

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

1 个答案:

答案 0 :(得分:2)

您可以创建一个入口点脚本来执行此操作,然后再运行您的应用程序。我可能会使用撰写文件而不是直接在映像中进行部署,这样您就不会在生产环境中动态更新容器。

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

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