Rob*_*her 12 python git docker docker-compose
在我的 docker 镜像中,我克隆了 git master 分支来检索代码。我在开发环境中使用 docker-compose 并使用卷运行我的容器。从我的 python requirements.txt 文件安装新项目需求时遇到了一个问题。在开发环境中,它永远不会在开发环境中安装新的需求,因为在重新构建镜像时,最新的代码是从 github 中拉取的。
下面是我的 dockerfile 的一个例子:
FROM base
# Clone application
RUN git clone repo-url
# Install application requirements
RUN pip3 install -r app/requirements.txt
# ....
Run Code Online (Sandbox Code Playgroud)
这是我的撰写文件:
myapp:
image: development
env_file: .env
ports:
- "8000:80"
volumes:
- .:/home/app
command: python3 manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
有没有办法在开发后安装新添加的需求?
Ale*_*una 11
我解决这个问题的方法是运行两个服务:
这就是 docker-compose.yml 文件的样子:
version: '3'
services:
django:
image: python:3.7-alpine
volumes:
- pip37:/usr/local/lib/python3.7/site-packages
- .:/project
ports:
- 8000:8000
working_dir: /project
command: python manage.py runserver
depends_on:
- requirements
requirements:
image: python:3.7-alpine
volumes:
- pip37:/usr/local/lib/python3.7/site-packages
- .:/project
working_dir: /project
command: pip install -r requirements.txt
volumes:
pip37:
external: true
Run Code Online (Sandbox Code Playgroud)
PS:我为 pip 模块创建了一个命名卷,以便我可以在不同的项目中保留它们。您可以通过运行自己创建一个:
docker volume create mypipivolume
Run Code Online (Sandbox Code Playgroud)
有两种方法可以做到这一点。
您可以进入容器并自行完成。缺点:不自动化。
$ docker-compose exec myapp bash
2912d2cd9eab# pip3 install -r /home/app/requirements.txt
Run Code Online (Sandbox Code Playgroud)
您可以使用运行准备工作的入口点脚本,然后运行命令。
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"]
Run Code Online (Sandbox Code Playgroud)
入口点.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 "$@"
Run Code Online (Sandbox Code Playgroud)
入口点在容器启动时像这样运行:
/entrypoint.sh $CMD
Run Code Online (Sandbox Code Playgroud)
其中扩展为:
/entrypoint.sh python3 manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
首先运行准备工作,然后在入口点脚本的末尾,执行传入的参数。这是您的命令,因此 entrypoint.sh 退出并由您的 Django 应用服务器替换。
更新:
在评论聊天后,发现使用exec
运行命令很重要,而不是像这样在入口点脚本的末尾运行它:
python3 manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
我不记得为什么它很重要,但我以前也遇到过这个问题。您需要执行该命令,否则它将无法正常工作。
归档时间: |
|
查看次数: |
19345 次 |
最近记录: |