我希望我的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
来管理软件包。
请注意,我不希望升级旧软件包,而只安装新软件包。
作为奖励,如果仅安装新软件包的名称(如果避免“已安装”消息),那么我可以写入日志文件,那就太好了
答案 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