Docker组合安装requirements.txt

在我的docker镜像中,我克隆了git master分支来检索代码。 我使用docker-compose作为开发环境,并使用卷运行我的容器。 从我的python requirements.txt文件安装新的项目需求时遇到了一个问题。 在开发环境中,它永远不会在开发环境中安装新的需求,因为重新构build映像时,最新的代码是从github中提取的。

以下是我的dockerfile的一个例子:

FROM base # Clone application RUN git clone repo-url # Install application requirements RUN pip3 install -r app/requirements.txt # .... 

这是我的撰写文件:

 myapp: image: development env_file: .env ports: - "8000:80" volumes: - .:/home/app command: python3 manage.py runserver 0.0.0.0:8000 

在构build开发之后,是否有任何方法来安装新增的需求?

有两种方法可以做到这一点。

用手

你可以进入容器并自己做。 下行:不自动。

 $ docker-compose exec myapp bash 2912d2cd9eab# pip3 install -r /home/app/requirements.txt 

使用入口点脚本

您可以使用运行准备工作的入口点脚本,然后运行该命令。

Dockerfile:

 COPY entrypoint.sh /entrypoint.sh RUN chmod 755 /entrypoint.sh # ... probably other stuff in here ... CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"] ENTRYPOINT ["/entrypoint.sh"] 

entrypoint.sh:

 #!/bin/sh cd /home/app pip3 install -r requirements.txt # May as well do this too, while we're here. python3 manage.py migrate exec "$@" 

入口点在容器启动时就像这样运行:

 /entrypoint.sh $CMD 

其中扩展到:

 /entrypoint.sh python3 manage.py runserver 0.0.0.0:8000 

准备工作先运行,然后在入口脚本结束时,传入的参数被执行。 这是你的命令,所以entrypoint.sh退出并由Django应用服务器取代。

更新:

在对聊天进行评论之后,发现使用exec来运行命令非常重要,而不是在入口点脚本的末尾运行它,如下所示:

 python3 manage.py runserver 0.0.0.0:8000 

我不记得为什么它很重要,但我也遇到过这种情况。 您需要执行该命令,否则将无法正常工作。