docker部署flask并遷移至內網

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

通過網盤分享的文件: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;一份…