需要直接使用的可以使用下面的链接:

通过网盘分享的文件:docker_flask.tar
链接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwd=qxqm 提取码: qxqm
来自百度网盘超级会员v6的分享

外网部署docker版flask

目录结构
./miniconda-docker/
├── docker-compose.yml
├── Dockerfile
└── workspace
1. 更新后的 docker-compose.yml(无 version 字段)
services:miniconda:build: .container_name: miniconda_appports:- "5000:5000"volumes:- ./workspace/app.py:/workspace/app.py  # 关键挂载- ./workspace:/workspaceenvironment:FLASK_APP: app.pyFLASK_ENV: development
2. 优化后的 Dockerfile
FROM ubuntu:20.04# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive \PATH="/opt/conda/bin:$PATH" \CONDA_DIR="/opt/conda"# 安装基础依赖
RUN apt-get update && apt-get install -y \wget \bzip2 \ca-certificates \&& rm -rf /var/lib/apt/lists/*# 下载并安装 Miniconda(清华源)
RUN wget -q https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \bash miniconda.sh -b -p $CONDA_DIR && \rm miniconda.sh# 接受Anaconda许可协议
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r# 配置全量清华源
RUN conda config --remove-key channels && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \conda config --set show_channel_urls yes# 配置pip清华源
RUN mkdir -p /root/.pip && \echo '[global]\n\
index-url = https://pypi.tuna.tsinghua.edu.cn/simple\n\
trusted-host = pypi.tuna.tsinghua.edu.cn' > /root/.pip/pip.conf# 创建Python环境并安装依赖
RUN conda create -n python311 python=3.11 -y && \/opt/conda/envs/python311/bin/pip install numpy flask pandas# 设置工作目录
WORKDIR /workspace
COPY app.py .# 启动命令
CMD ["bash", "-c", "source /opt/conda/bin/activate python311 && flask run --host=0.0.0.0"]
3. 验证用的 app.py
from flask import Flask, jsonify
import numpy as np
import pandas as pdapp = Flask(__name__)app.json.ensure_ascii = False
@app.route('/')
def hello():# 生成测试数据array = np.array([1, 2, 3])df = pd.DataFrame({'列A': [1, 2], '列B': [3, 4]})# 构造响应数据response = {"服务状态": "Flask服务运行正常!","numpy示例数组": array.tolist(),"pandas数据表": {"列名称": list(df.columns),"数据内容": df.to_dict(orient='records')},"环境信息": {"Python版本": "3.11","依赖包版本": {"numpy": np.__version__,"pandas": pd.__version__,"flask": "2.3.2"}}}return jsonify(response)  # 使用jsonify保持JSON格式if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)

使用说明

  1. 创建目录和文件:
mkdir -p miniconda-docker/workspace
cd miniconda-docker
touch docker-compose.yml Dockerfile app.py
  1. 将上述内容写入对应文件

  2. 构建并启动:

docker compose up -d --build
  1. 验证服务:
curl http://localhost:5000
# 或浏览器访问 http://localhost:5000

方案特点

  1. 完全兼容新版本:移除 version 字段,适配最新 Docker Compose
  2. 最小化构建:每个 RUN 指令都清理缓存
  3. 国内优化:全程使用清华源加速
  4. 环境隔离:在独立 conda 环境中安装 Python 和依赖
  5. 生产就绪:适合直接部署到生产环境

常见问题处理

如果遇到构建问题,可以尝试:

# 彻底清理旧构建
docker compose down --rmi all# 重新构建
docker compose build --no-cache

迁移至内网

以下是完整的容器导出为镜像并部署到内网的步骤:


1. 导出当前容器为镜像

# 查看运行中的容器ID
docker ps# 将容器提交为镜像(推荐使用--change参数固化配置)
docker commit \--change='CMD ["bash", "-c", "source /opt/conda/bin/activate python311 && flask run --host=0.0.0.0"]' \--change='ENV PATH=/opt/conda/envs/python311/bin:$PATH' \979444076b82 my_flask_app:1.0

2. 验证新镜像

# 查看新镜像
docker images | grep my_flask_app# 测试运行
docker run -d -p 5000:5000 --name test_flask my_flask_app:1.0
curl http://localhost:5000

3. 导出镜像文件(两种方式任选)

方式一:保存为压缩包(推荐)
docker save my_flask_app:1.0 | gzip > my_flask_app_1.0.tar.gz
方式二:导出为容器快照
docker export 979444076b82 > my_flask_container.tar

4. 内网部署步骤

在内网机器上操作:
# 1. 传输镜像文件到内网(需用U盘/内部文件服务)
scp my_flask_app_1.0.tar.gz user@internal-server:/path/# 2. 加载镜像
gunzip -c my_flask_app_1.0.tar.gz | docker load# 3. 运行容器
docker run -d \-p 5000:5000 \-v /path/to/app_data:/workspace \--name flask_prod \my_flask_app:1.0

5. 生产环境增强配置(可选)

创建 docker-compose.prod.yml
version: '3.8'
services:flask_app:image: my_flask_app:1.0restart: alwaysports:- "5000:5000"volumes:- /data/flask_app:/workspaceenvironment:FLASK_ENV: productionTZ: Asia/Shanghai
启动命令
docker-compose -f docker-compose.prod.yml up -d

关键注意事项

  1. 路径固化

    • 确保容器内所有路径使用绝对路径(如 /workspace/app.py
    • 检查挂载卷路径是否存在
  2. 依赖检查

    # 进入容器检查环境
    docker exec -it flask_prod /opt/conda/envs/python311/bin/pip list
    
  3. 防火墙设置

    • 内网机器需开放5000端口
    • 建议配合Nginx反向代理
  4. 离线包备份(针对极端内网环境):

    # 导出conda环境配置
    docker exec 979444076b82 /opt/conda/envs/python311/bin/pip freeze > requirements.txt
    

排错指南

如果部署失败:

  1. 检查镜像完整性:

    docker run -it --rm my_flask_app:1.0 bash -c "python -c 'import flask; print(flask.__version__)'"
    
  2. 查看容器日志:

    docker logs -f flask_prod
    

通过以上步骤,您可以将开发好的Flask应用完整迁移到内网环境。如需更高安全性,建议:

  • 使用私有Docker仓库(如Harbor)
  • 构建时删除缓存(docker build --no-cache
  • 使用多阶段构建减小镜像体积

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96043.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96043.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96043.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

文章目录161. Java Lambda 表达式 - 使用工厂方法创建 Predicates🎯 Predicate 工厂方法概览🧪 示例一:Predicate.isEqual() 工厂方法🧪 示例二:Predicate.not() 工厂方法(Java 11)&#x1f3af…

c#Blazor WebAssembly在网页中多线程计算1000万次求余

在 Blazor WebAssembly 中实现多线程计算并获取线程 ID 是可行的,但需要正确配置多线程环境并处理线程安全和 UI 更新逻辑。以下是完整示例和检测方法:一、准备工作:启用多线程支持首先需确保项目已启用 WebAssembly 多线程,修改项…

鼠标右键没有“通过VSCode打开文件夹”

1, WinR 打开运行,输入regedit,打开注册表,找到HKEY_CLASSES_ROOT\*\shell分支,如果没有shell分支,则在*下点击右键,选择“新建-项”,建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和属性赋值

目录 1. Spring定义: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 创建一个Maven项目 (2). 导入核心 jar包 (3). 编写 spring 配置文件 (4). 编写实体类,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下载上传

前端 大文件分片下载上传 背景介绍: 当前项目是给投行部门做系统,业务方需要有专门的文档中心去管理文件,包括但是不限于文件的上传和下载等等。笔者本来就是采用的浏览器表单上传的方式进行文件上传,但是谁曾想在进行稍微大一点的…

【Python练习】097. 编写一个函数,实现简单的版本控制工具

097. 编写一个函数,实现简单的版本控制工具 097. 编写一个函数,实现简单的版本控制工具 示例代码 功能说明 使用方法 注意事项 实现方法 基于文件快照的实现方法 基于差异存储的实现方法 基于命令模式的实现方法 基于Git-like的实现方法 097. 编写一个函数,实现简单的版本控…

嵌入式硬件篇---Tof

TOF 的原理与本质TOF(Time of Flight,飞行时间)是一种通过测量信号(通常是光)在空间中传播时间来计算距离的技术。其本质是利用 “距离 速度 时间” 的物理公式:通过发射信号(如激光、红外光&…

Vue diff简介

Vue3 diff 最长递增子序列双端diff 理念 相同的前置和后置元素的预处理,考虑边界情况,减少移动;最长递增子序列(动态规划、二分法),判断是否需要移动 操作 前置与后置预处理判断是否需要移动 递增法&#x…

罗技MX Anywhere 2S鼠标修复记录

【现象】单击时总是出现双击的现象 【问题原因】从网络收集: 说法1,欧姆龙微动损坏;说法2,按键磨损导致按键和微动开关接触不良; 【问题排查】 微动损坏:拆掉壳子后,用手按住左键的微动开关&…

常见IP模块的仲裁策略和实现

在一个 Message Unit 中包含两个 Core(处理器核心),它们之间访问共享资源(如寄存器、FIFO、buffer 等)时,仲裁机制(Arbitration) 是确保系统稳定性和正确性的关键。以下是常见的仲裁…

上周60+TRO案件,波比的游戏时间/丹迪世界/飞盘/迪奥/多轮维权,手表/汽车品牌持续发力,垃圾桶专利等新增侵权风险!

赛贝整理上周(2025年8月11日-8月15日)的TRO诉讼案件发案情况,根据赛贝TRO案件查询系统了解到,上周合计发起了超60起诉讼案件,涵盖 IP /品牌、版权、专利等多个领域,涉及影视、奢侈品、汽车、游戏、日常用品…

用 Python 在 30 分钟内搭一个「可回放的实时日志」——把攻击流量变成可视化剧情

业务背景 我们运营一款 FPS 端游,外挂作者常把 DDoS 伪装成「玩家掉线」来骗客服。以前排查要捞 CDN 日志、对时间戳、人工比对,平均 2 小时才能定位。现在用一条 30 行的 Python 脚本把边缘节点日志实时打到 Kafka,再回放到 Grafana&#xf…

如何将 LM Studio 与 ONLYOFFICE 结合使用,实现安全的本地 AI 文档编辑

人工智能正在改变我们的工作方式——但如今大多数 AI 工具都存在弊端:速度和便利性虽有所提升,但也意味着数据需要发送到外部服务器。对于教育工作者、企业、非政府组织以及任何处理敏感信息的人来说,这都是不可接受的风险。 LM Studio 和 O…

超市电商销售分析项目:从数据分析到业务决策

国际超市电商销售数据分析实战:从数据清洗到业务决策的完整流程 在电商行业,数据是驱动业务增长的核心引擎。本文将以国际超市电商销售数据为研究对象,完整拆解从数据准备 → 深度分析 → 策略输出的实战流程,涵盖数据清洗、多维度…

GitHub 热榜项目 - 日榜(2025-08-17)

GitHub 热榜项目 - 日榜(2025-08-17) 生成于:2025-08-17 统计摘要 共发现热门项目:12 个 榜单类型:日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术趋势:1) AI基础设施持续爆发,Archon OS和Parlant聚焦AI任务管…

记忆翻牌游戏 greenfoot 开发

记忆翻牌游戏是一种经典的益智游戏,玩家需要翻开卡片并记住它们的位置,然后找到所有匹配的卡片对。 核心玩法 游戏开始时,所有卡片都是背面朝上玩家每次可以翻开两张卡片如果两张卡片图案相同,则保持翻开状态(匹配成功…

【lucene】SegmentInfos

SegmentInfos 类中文说明 ———————————— **一句话** SegmentInfos 是 segments_N 文件的**内存表示**。它把磁盘上的 segments_N 读进来,变成一堆 SegmentInfo 的集合;当你增删改索引、合并段、提交时,再把它写回磁盘&#x…

Read Frog:一款开源AI浏览器语言学习扩展

Read Frog:一款开源AI浏览器语言学习扩展 来源:Poixe AI Read Frog(中文名:陪读蛙)是一款开源的浏览器扩展,旨在通过人工智能技术,将常规网页浏览转化为一种沉浸式的语言学习体验。该工具通过…

天地图应用篇:增加全屏、图层选择功能

天地图应用篇&#xff1a;增加全屏、图层选择功能本节说明&#xff1a; 目的&#xff1a; 实现地图的图层切换全屏显示 / 退出全屏案例截图 示下&#xff1a;案例代码示例代码&#xff1a; <template><div class"tianditu-map-container"><!-- 顶部搜…

从零开始,系统学习AI与机器学习:一份真诚的学习路线图

人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;正在深刻改变众多行业的面貌&#xff0c;掌握这些技术已成为许多技术从业者提升竞争力的重要路径。无论你是希望进入这个充满潜力的领域&#xff0c;还是期望在现有技术基础上进行拓展&#xff0c;一份…