Я знаю, что это может быть помечено как дубликат вопроса, но я в основном перепробовал все, что получил в Интернете.
Я разработал простой REST API с бэкэндом mysql.Чтобы запустить приложение, я пытаюсь использовать docker compose, чтобы вывести их обоих, но мой, когда я поднимаю свой контейнер, пытается запустить db.create_all из файла, но он говорит, что не может подключиться.Ниже приведены мои соответствующие файлы:
Dockerfile:
FROM python:latest
## make a local directory
RUN mkdir /flask_rest_service
WORKDIR /flask_rest_service
ADD . .
RUN pip install -r requirements.txt
EXPOSE 8080
CMD python code/sqlinit.py && python code/app.py
sqlinit.py:
from models.user_model import UserModel
from app import app, db
def main():
with app.app_context():
db.create_all()
admin = UserModel(username='admin', password='admin', email='subhayan.here@gmail.com')
admin.save_to_db()
if __name__ == "__main__":
main()
Файл Docker compose.yml:
version: '2'
services:
web:
build: .
ports:
- "8080:8080"
container_name: web-service
depends_on:
- db
links:
- db
db:
image: mysql:latest
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: restapi
файл settings.py:
import os
from datetime import timedelta
SECRET_KEY = os.urandom(24)
DEBUG = True
PROPAGATE_EXCEPTIONS = True
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:rootpass@db/restapi'
JWT_ACCESS_TOKEN_EXPIRES = timedelta(seconds=60)
JWT_REFRESH_TOKEN_EXPIRES = timedelta(seconds=300)
JWT_BLACKLIST_ENABLED = True
JWT_BLACKLIST_TOKEN_CHECKS = ['access', 'refresh']
Из того, что я вижу, похоже, что sqlinit.py - это проблема.Но я не знаю, как это решить.Когда мое приложение запускается, в базе данных должен быть пользователь-администратор, поэтому я должен его использовать.