IP地址检测
视频播放器
输入关键词搜索
登录
在Docker中部署Python-Flask服务器

在Docker中部署Python-Flask服务器

2023-02-28
暂无分类

创建flask应用

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=["GET"])
def index():
    return "hello world"


if __name__ == '__main__':
    app.run()

启动flask服务器

Gunicorn(Green Unicorn)是一个基于Python的WSGI HTTP服务器,它能够处理并发连接,支持异步处理请求,通过工作进程池来提高性能,同时还能自动重启工作进程,保证系统稳定性。它是Python Web应用部署的常用工具之一

  • -b 绑定IP和端口号,如127.0.0.1:5001
  • --access-logfile 日志
  • --error-logfile 错误日志
  • app:app [模块名]:[在python代码中创建的flask实例名]

需要用nohup命令让gunicorn在后台运行

# 将nohup的日志和gunicorn的日志全部写到/app/log.txt中
nohup \
    gunicorn -b 127.0.0.1:5001 \
    --access-logfile /app/log.txt \
    --error-logfile /app/log.txt \
    app:app \
    >> /app/log.txt 2>&1 &

把以上操作写到Dockerfile中统一管理

FROM python:alpine

WORKDIR /app

#把源码拷贝到容器里
COPY app.py /app

# 使用pipreqs自动生成requirements.txt
# --force Overwrite existing requirements.txt
RUN pip install gunicorn && \
    pip install pipreqs && \
    pipreqs . --encoding=utf8 --force && \
    pip install -r requirements.txt

EXPOSE 5001

CMD ["nohup", "gunicorn", "-b", "0.0.0.0:5001","--access-logfile","/app/log.txt","--error-logfile","log.txt", "app:app", ">> /app/log.txt 2>&1", "&"]

构建容器并运行容器

set -e
# 删除之前的容器和镜像,还有日志文件
docker rm -f api
docker rmi -f api
rm -f log.txt

# 构建容器并创建日志文件进行挂载
docker build -t api .
touch log.txt
chmod 777 log.txt

# 启动容器
docker run -d \
    --name api \
    -e TZ=Asia/Shanghai \
    -v ${PWD}/log.txt:/app/log.txt \
    --restart=always \
    -p 5001:5001 \
    api

常见问题

  1. 挂载文件或挂载目录不存在 解决办法:创建对应的文件,重新运行
  2. 挂载的文件权限不对 解决办法:把挂载的文件权限设置为777
  3. 运行报错 解决办法:用docker logs查看容器日志,或者查看挂载的日志文件
THE END
0/500
暂无评论
📢网站公告
欢迎来到这里
⚙️实用工具
html转pdfmarkdown编辑器
本站推荐:腾讯云服务器仅需2.3折 (点击直达)
用户协议
隐私政策
Build Time: 2025-04-26 11:07:00