我用的是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 可以得到两个字符串 …