我希望我的 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
