有两种方法可以做到这一点。
By hand
您可以进入容器并自行操作。缺点:不自动化。
$ 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"]
入口点.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 应用服务器替换。
UPDATE:
聊完评论后发现使用很重要exec
运行该命令,而不是像这样在入口点脚本末尾运行它:
python3 manage.py runserver 0.0.0.0:8000
我不太记得为什么它很重要,但我以前也遇到过这个。您需要执行该命令,否则它将无法正常工作。