我希望我的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
来管理包。请注意,我不希望升级旧包,只安装新包。
作为奖励,如果我只能安装新软件包的新软件包的名称(避免“已安装”的消息),那么我可以写入日志文件会很棒
您可以在运行应用程序之前创建一个执行此操作的入口点脚本。我可能使用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