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