Docker容器中使用pyngrok安装ngrok时卡在99%无法完成
问题描述
我基于FastAPI开发了Python API,搭配与之交互的React前端。需要在应用容器内通过pyngrok运行ngrok隧道,并将生成的URL添加到CORSMiddleware的allow_origins中。但运行生成链接的脚本时,ngrok开始安装,到99%时卡住,无任何后续操作。本地环境下脚本运行正常,仅在容器中出现此问题,无报错信息,我已等待20分钟仍无进展。
相关配置文件
docker-compose.yml
version: '3.7' services: re: image: redis container_name: re command: redis-server --requirepass redistest ports: - "6379:6379" db: image: postgres restart: always container_name: db command: -p 5435 expose: - 5435 ports: - "5435:5432" environment: - POSTGRES_PASSWORD=test - POSTGRES_USER=test - POSTGRES_DB=test api: container_name: qrmenu image: dchnkoo/qr-sys env_file: - qr-sys/.env ports: - "8000:8080" - "5555:5555" depends_on: - db - re
Dockerfile
FROM python:3.10.12 RUN apt-get update && apt-get install -y \ supervisor \ && rm -rf /vat/lib/apt/lists/* RUN mkdir -p /etc/supervisor/conf.d COPY supervisord.conf /etc/supervisor/supervisord.conf WORKDIR /qrsystem COPY requirements.txt . RUN pip install -r requirements.txt COPY . . RUN chmod +x ./*.sh CMD [ "./app.sh" ]
app.sh
#! /bin/bash sleep 5 python3 -m app.SECRET_KEY.generate --set-secret sleep 5 alembic revision --autogenerate alembic upgrade head /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
supervisor.conf
[supervisord] nodaemon=true [program:ngrok] command=python3 -m ngrok.ngrok directory=/qrsystem autostart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 stderr_logfile=/dev/fd/2 stderr_logfile_maxbytes=0 [program:API] command=gunicorn app.API.api:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind=0.0.0.0:8080 directory=/qrsystem autostart=true autorestart=true stdout_logfile=/var/log/gunicorn.log stderr_logfile=/var/log/gunicorn_err.log [program:celery] command=celery --app=app.framework.celery.object:celery worker -l INFO directory=/qrsystem autostart=true autorestart=true stdout_logfile=/var/log/celery.log stderr_logfile=/var/log/celery_err.log [program:flower] command=celery --app=app.framework.celery.object:celery flower directory=/qrsystem autostart=true autorestart=true stdout_logfile=/var/log/flower.log stderr_logfile=/var/log/flower_err.log
pyngrok脚本
from pyngrok import ngrok from app.settings import origins import os env = os.environ AUTH_TOKEN = env.get("NGROK_AUTHTOKEN", None) if AUTH_TOKEN is not None: PORT = env.get("NGROK_PORT", "5173") HOST = env.get("NGROK_HOST", "127.0.0.1") ngrok.set_auth_token(AUTH_TOKEN) tunnel = ngrok.connect(f"{HOST}:{PORT}", "http") url = tunnel.public_url print(f"""\n\n\n\n\n ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## URL {url} -> http://{HOST}:{PORT} \n\n\n\n\n """) try: origins.remove("*") except: pass origins.append(url) while True: ...
已尝试方案
- 将api容器的
network_mode设置为"host",但未解决ngrok安装卡住的问题
内容的提问来源于stack exchange,提问作者Valerii
相关产品推荐
相关产品推荐

