docker部署自己寫的c++http服務器教程

我用的是ubuntu 22.04環境下 qt c++ 寫的應用程序,是終端程序,不是界面,然后用linuxdeployqt工具將其打包成了AppImage可執行文件,以上是部署前的準備工作,需要確保AppImage可執行文件在自己的ubuntu上可以運行才能執行以下操作。

docker部署詳細步驟

第一步:新建一個文件夾

mkdir myhttp-server
cd myhttp-server

第二步:

將生成的AppImage可執行文件放入新建的文件夾中,具體移動的方式這里不再詳細敘述

第三步:新建一個Dockerfile文件

sudo vim Dockerfile

在文件中加入以下內容,有詳細的注釋

# 使用與構建環境匹配的Ubuntu版本 這里使用了鏡像源 很重要
FROM docker.1ms.run/ubuntu:22.04# 設置非交互模式
ENV DEBIAN_FRONTEND=noninteractive# 安裝AppImage運行所需的依賴和FUSE
RUN apt-get update && apt-get install -y \fuse \libfuse2 \libqt5core5a \libqt5network5 \# 根據需要添加其他Qt模塊依賴&& rm -rf /var/lib/apt/lists/*# 允許非root用戶使用FUSE
RUN echo "user_allow_other" >> /etc/fuse.conf# 創建應用目錄
WORKDIR /app# 復制AppImage到容器中
COPY Application-x86_64.AppImage ./# 賦予執行權限
RUN chmod +x Application-x86_64.AppImage# 暴露HTTP服務器端口(根據你的實際端口修改)
EXPOSE 8888# 運行AppImage(使用--appimage-extract-and-run參數避免FUSE權限問題)
CMD ["./Application-x86_64.AppImage", "--appimage-extract-and-run"]

第四步:運行如下指令構建容器

注意最后面有個.呢

docker build -t qt-http-server:latest .

Docker 的構建命令,用于根據當前目錄下的Dockerfile文件創建鏡像。-t--tag的縮寫,用于給構建的鏡像添加標簽(名稱和版本)
Dockerfile必須存在于該目錄下(否則需要用-f參數指定路徑)

第五步:運行如下指令啟動容器

docker run -d -p 8888:8888 --restart=always --name qt-http-server qt-http-server:latest

第六步:查看運行狀態

  • 運行如下指令查看運行狀態
docker ps
docker images
  • 持續查看運行日志,也就是終端打印 沒有-f就不會持續追蹤
docker logs -f qt-http-server

錯誤解決

如果docker容器已經存在,那么運行如下指令

# 停止容器(如果正在運行)
docker stop qt-http-server# 刪除容器
docker rm qt-http-server# 重新運行新的容器 端口指定為自己的端口
docker run -d -p 8080:8080 --restart=always --name qt-http-server qt-http-server:latest

如果想要保留原來的容器,運行如下指令

# 使用新名稱運行,比如 qt-http-server-new
docker run -d -p 8080:8080 --restart=always --name qt-http-server-new qt-http-server:latest

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91203.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Caffeine 緩存庫的常用功能使用介紹

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目錄 列表(List)特點 創建列表 RemoveAll 刪除與之條件相匹配的數據 會返回刪除的個數 Capacity 獲取或設置列表的容量 更多方法可參照上篇文章:C#_ArrayList動態數組 字典(Dictionary)特點 定義一個字典 向字…

【實時Linux實戰系列】實時網絡控制與調度

在實時控制系統中,網絡調度是確保實時數據流傳輸和處理不受延遲影響的關鍵。實時網絡控制與調度技術對于工業自動化、金融交易、多媒體流等領域至關重要。通過合理設計網絡調度策略,可以顯著提高系統的實時性和可靠性。本文將介紹如何在實時控制系統中實…

Qwen3-Coder:介紹及使用 -- 超強AI編程助手

更多內容:XiaoJ的知識星球 目錄一、Qwen3-Coder模型介紹1.預訓練階段(Pre-Training)2.后訓練階段(Post-Training)1)Scaling Code RL: Hard to Solve, Easy to Verify2)Scaling Long-Horizon RL二…

uniapp 如果進入頁面輸入框自動聚焦,此時快速返回頁面或者跳轉到下一個頁面,輸入法頂上來的頁面出現半屏的黑屏問題。

如果進入頁面輸入框自動聚焦,此時快速返回頁面或者跳轉到下一個頁面,輸入法頂上來的頁面出現半屏的黑屏問題。輸入法出來后,設置了自動將頁面頂上來的配置:pages.json"softinputMode": "adjustResize""g…

深入了解 Kubernetes(k8s):從概念到實踐

目錄 一、k8s 核心概念 二、k8s 的優勢 三、k8s 架構組件 控制平面組件 節點組件 四、k8s docker 運行前后端分離項目的例子 1. 準備前端項目 2. 準備后端項目 3. 創建 k8s 部署配置文件 4. 部署應用到 k8s 集群 在當今云計算和容器化技術飛速發展的時代&#xff0c…

Android User版本默認用test-keys,如何改用release-keys

Android User版本 默認用test-keys, 如何改用release-keys 開發云 - 一站式云服務平臺 --- build/core/Makefile | 5 1 file changed, 5 insertions() diff --git a/build/core/Makefile b/build/core/Makefile index --- a/build/core/Makefile b/build/core…

從零開始學習Dify-數據庫數據可視化(五)

概述上一篇文章我們圍繞 Excel 文件展開數據可視化教學,逐步掌握了數據導入、圖表構建和 AI 智能分析。在實際業務環境中,很多數據并不是保存在表格中,而是存儲于數據庫系統中,尤其是最常見的 MySQL。本篇作為本系列的第五篇&…

使用vue2和 element-ui 做一個點餐收銀臺系統前端靜態項目

今天給大家分享一個 關于點餐收銀臺的靜態網站,最近一直在練習前端項目,就使用vue2和 element-ui 做了一個 這樣簡單的 收銀臺系統。先給大家看一下 做出來的樣子。 因為是練習項目 所以頁面功能還是比較簡單的。 使用的技術是: 技術棧 Vu…

Spring Boot自動配置原理深度解析

Spring Boot自動配置原理深度解析 一、自動配置核心概念 1.1 什么是自動配置 Spring Boot自動配置(Auto-Configuration)是其核心特性之一,能夠根據項目依賴自動配置Spring應用程序。例如: 當檢測到H2數據庫依賴時,自動配置內存數據庫當存在Sp…

關于 Apache Ignite 中 Job 調度(Job Scheduling)與沖突控制(Collision Control) 的機制說明

這段內容是關于 Apache Ignite 中 Job 調度(Job Scheduling)與沖突控制(Collision Control) 的機制說明。我來為你逐段解析,幫助你深入理解其原理和使用方式。🔍 一、核心概念:Job 調度與 Colli…

網絡資源模板--基于Android Studio 實現的課程管理App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情(部分) 登錄頁 首頁 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

ROUGE-WE:詞向量化革新的文本生成評估框架

一、ROUGE 基礎與核心局限 ROUGE(Recall-Oriented Understudy for Gisting Evaluation) 是自動文本摘要與機器翻譯的主流評估指標,由 Chin-Yew Lin 在2004年發表的論文中首次系統提出。其核心變體包括: ROUGE-N:基于…

MGER綜合實驗

一.拓撲二、實驗需求 1、R5為ISP,只能進行IP地址配置,其所有地址均配為公有IP地址; 2、R1和R5間使用PPP的PAP認證,R5為主認證方; R2與R5之間使用ppp的CHAP認證,R5為主認證方; R3與R5之間使用HDLC封裝; 3、R1、R2、R3構建一個MGRE環…

高可用集群Keepalived、Redis、NoSQL數據庫Redis基礎管理

1. 總結負載均衡常見的算法 輪詢 (Round Robin):按順序將請求依次分配給后端服務器,適合服務器性能相近的場景。 加權輪詢 (Weighted Round Robin):在輪詢的基礎上,根據服務器的權重分配請求。 隨機 (Random):隨機選…

【深度學習】獨熱編碼(One-Hot Encoding)

獨熱編碼(One-Hot Encoding) 在機器學習中,數據預處理是不可或缺的關鍵一步。面對各種非數值類型的分類數據(Categorical Data),如何將其轉換為機器學習模型能夠“理解”的語言呢?獨熱編碼&…

Promise完全體總結

我們在上篇文章提到了異步會導致無法通過返回值來獲取函數的執行結果,我們通過傳入一個回調函數的方式,以參數的形式獲取到了我們想要獲取的數據,但是這樣如果需要對數據進行多次操作導致形成回調地獄那種不便于閱讀以及護理的代碼。為了解決…

SpringJDBC源碼初探-DataSource類

一、DataSource接口核心作用 DataSource是JDBC規范的核心接口,位于javax.sql包中,用于替代傳統的DriverManager獲取數據庫連接。Spring框架通過org.springframework.jdbc.datasource包對該接口進行了增強,提供連接池管理、事務綁定等高級特性…

C語言(08)——關于指針(逐漸清晰版)

為了更好地理解本篇文章的知識內容,讀者可以將以下文章作為補充知識進行閱讀 : C語言————原碼 補碼 反碼 (超絕詳細解釋)-CSDN博客 C語言————二、八、十、十六進制的相互轉換-CSDN博客 C語言————斐波那契數列的理解…

LeetCode 1616.分割兩個字符串得到回文串

給你兩個字符串 a 和 b ,它們長度相同。請你選擇一個下標,將兩個字符串都在 相同的下標 分割開。由 a 可以得到兩個字符串: aprefix 和 asuffix ,滿足 a aprefix asuffix ,同理,由 b 可以得到兩個字符串 …