mas*_*lak 5 python flask docker flask-migrate
我有一个具有以下结构的项目:
proj
src
application
app.py
manage.py
migrations
Dockerfile
docker-compose.yaml
Run Code Online (Sandbox Code Playgroud)
我的目标是在 docker-compose 期间从应用程序目录运行迁移以在数据库中创建表。
python manage.py db upgrade
Run Code Online (Sandbox Code Playgroud)
文件
FROM python:3.7-alpine
ADD requirements.txt /code/
WORKDIR /code
RUN apk add --no-cache postgresql-dev gcc python3 musl-dev && \
pip3 install -r requirements.txt
ADD . /code
EXPOSE 5000
WORKDIR /code/src/application
CMD ["flask", "run", "--host=0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yaml
---
version: "3"
services:
web:
links:
- "db"
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- db
env_file:
- .env
db:
image: postgres:10
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=app
ports:
- "5432:5432"
expose:
- 5432
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我会添加一个 bash 脚本,其中包含您要在启动期间运行的命令,并将其用作图像中的默认入口点。通常最好的做法是调用这个脚本entrypoint.sh
#!/usr/bin/env bash
python manage.py db upgrade
flask run --host=0.0.0.0
Run Code Online (Sandbox Code Playgroud)
然后,在您的 Dockerfile 中,将最后一行替换为以下内容
RUN chmod u+x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
如果您只想在 Docker compose 中运行升级命令,那么您可以像这样在 compose 文件中覆盖它而不是更改图像中的默认入口点
web:
links:
- "db"
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- db
entrypoint: /code/entrypoint.sh
env_file:
- .env
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6473 次 |
| 最近记录: |