mongodb FastApi function @app.on_event('startup')它如何与Docker compose一起工作?

wz3gfoph  于 2023-04-29  发布在  Go
关注(0)|答案(1)|浏览(200)

我有一个FastApi(FastApiUsers包)+MongoDb+Docker应用程序,我有一个必须在应用程序开始时启动的函数,用于连接到db:
async def on_startup():await init_beanie(database=db,document_models=[ User,],)
但是如果我做docker-compose -f docker-compose。yml up -d --build,这个函数不起作用。如果我在没有docker的情况下在本地启动我的应用程序,它工作得很好:
进口紫外线
ifname==“main": www.example.com (“ www.example.com :app”,host=“ www.example.com ”,log_level=“info”)
如何使用Docker?
我尝试在启动docker-container时创建一个命令id Dockerfile来初始化该函数。但是没有用

ctehm74n

ctehm74n1#

我不确定这是否有帮助,但无论如何:
1.你检查过你的容器状态和logs了吗?
1.能展示你的docker-compose就太好了。yml文件(例如portsnetwork: bridge可以帮助或其他)
1.我个人遇到了一些问题,因为MongoDB启动(部署)了一段时间,而其他容器在这一点上出现了错误。例如-你docker compose up,在2秒内你的FastApi启动,你得到了一个错误(技术上它工作),只有在5秒。MongoDB已经准备好了。control startup和healthcheck可以提供帮助
1.不确定这是否需要,是否正确(它对我有效),但有我的docker-compose模板(${VAR}- variables):

version: "3.8"

services:
  mongodb:
    image: mongo:latest # need your version
    environment:
      MONGO_INITDB_DATABASE: ${DB_NAME}
      MONGO_INITDB_ROOT_USERNAME: ${DB_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${DB_PASSWORD}
    networks:
      - ${NETWORK_NAME}
    ports:
     - ${DB_PORT}:${DB_PORT}
    volumes:
     - ./${DB_NAME}:/var/lib/mongodb/data
    restart: unless-stopped
    healthcheck:
      test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u ${DB_USER} -p ${DB_PASSWORD} --quiet | grep 1
      timeout: 45s
      interval: 10s
      retries: 10
      start_period: 30s
    command: -p ${DB_PORT}
  server:
    depends_on:
      mongodb:
        condition: service_healthy
    networks:
      - ${NETWORK_NAME}
    ...
networks:
  ${NETWORK_NAME}:
    driver: bridge
volumes:
  ${DB_NAME}:
    driver: local

相关问题