番外-linux系统运行.net framework 4.0的项目

基础环境:linux系统,.net framework 4.0,npgsql 2.2.5.0 (版本不同,构建可能失败)
方法背景:linux不支持运行.net framework 4.0,高版本mono不支持npgsql 2.x
主要使用:docker+mono4.2.x+xsp4 4.2.x
主要难点:兼容性问题,以及旧版本镜像不再维护,自动下载包不完整,下载失败,需手动下载构建

一、安装docker(以下镜像为手动构建,不再赘述)

1,上传docker-24.0.7.tgz到linux服务器的/opt目录
2,在服务器上解压压缩包到docker文件夹
cd /opt
tar -xvzf docker-24.0.7.tgz
3,将docker文件夹里所有文件复制粘贴到/usr/bin目录下

(1)sudo cp /opt/docker/* /usr/bin/
(2)赋予它执行权限(让它能运行)

sudo chmod +x /usr/bin/docker
sudo chmod +x /usr/bin/docker-proxy
sudo chmod +x /usr/bin/docker*
sudo chmod +x /usr/bin/containerd*
sudo chmod +x /usr/bin/runc
4,/etc/systemd/system/下创建服务文件/docker.service
[Unit]
Description=Docker Service
After=network.target[Service]
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity[Install]
WantedBy=multi-user.target
5,让 systemd 识别新服务,并启动 Docker

(1)回到根目录 cd /
(2)
重载 systemd 配置

sudo systemctl daemon-reload

启动 Docker

sudo systemctl start docker

设置开机自动启动

sudo systemctl enable docker

查看是否安装

docker version

二、安装 PostgreSQL镜像,部署数据库

1,上传postgres13.tar到linux服务器的/opt目录
2,在服务器导入镜像
docker load -i /opt/postgres13.tar

检验是否导入:docker images

3,运行PGSQL容器
docker run -d --name pg13 -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:13
4,上传数据库文件public.sql到linux服务器的/opt目录
5,把 SQL 文件拷贝到容器内 /tmp/ 目录
docker cp "/opt/public.sql" pg13:/tmp/
6,执行导入命令
docker exec -it pg13 psql -U postgres -f /tmp/public.sql

等待导入完成

7,检查

进入容器:

docker exec -it pg13 bash

登录数据库:

psql -U postgres

查看当前数据库的所有表:

\dt

三、构建运行Mono镜像

1,创建 Mono的 Dockerfile(web.config里面数据库配置Server=pg13;)

在这里插入图片描述

Windows 上,新建一个文件夹 mono1,在里面放入mono421-debs文件夹和xsp4-debs文件夹(文里面的文件为手动下载放入,因为自动下载报错,可能已经不再维护了)。以及名为Dockerfile的文件
(1)Dockerfile 内容:
说明:手动下载安装ubuntu:16.04,

FROM ubuntu:16.04ENV DEBIAN_FRONTEND=noninteractive# 安装基本依赖
RUN apt-get update && apt-get install -y \ca-certificates \libglib2.0-0 \libx11-6 \tzdata \&& apt-get clean# 拷贝 Mono 4.2.3 和 xsp4 的 .deb 包
COPY mono421-debs/ /tmp/mono421/
COPY xsp4-debs/ /tmp/xsp4/# 安装 mono
RUN dpkg -i /tmp/mono421/*.deb || apt-get -f install -y# 安装 xsp4
RUN dpkg -i /tmp/xsp4/*.deb || apt-get -f install -y# 暴露端口
EXPOSE 8290# 运行 xsp4(NXYW即打包文件夹)
COPY NXYW/. /
CMD ["mono", "/usr/lib/mono/4.5/xsp4.exe", "--port", "8290", "--nonstop", "--root", "/"]
2,把 NXYX文件夹也复制进这个 mono1 文件夹
3,在 Windows 上构建镜像并导出

构建:docker build -t mono-net45-app1 .
导出:docker save -o mono-net45-app1.tar mono-net45-app1

4,上传mono-net45-app.tar到linux服务器的/opt目录
5,加载镜像:
docker load -i /opt/mono-net45-app1.tar
6,运行镜像:

docker run -d --name mono-net45-app1 -p 8290:8290 --restart unless-stopped mono-net45-app1 (8290是端口号)

7,创建自定义docker网络,使得项目和数据库连通

1,创建docker网络:

docker network create mynet

2,把 pg13 加入 mynet(前面修改Web.config的用处了):

docker network connect mynet pg13

3,把mono-net45-app1加入 mynet:

docker network connect mynet mono-net45-app1

完成,如无问题,可访问了

四,其他命令(若有需要可执行):

修改文件(或)

(1)把文件从容器拷到宿主机:

docker cp mono-net45-app1:/var/www/html/Web.config /root/Web.config

(2)用 docker cp 拷回容器:

docker cp /root/Web.config  mono-net45-app1:/var/www/html/Web.config

(3)重启容器:

docker restart mono-net45-app1
停止旧容器
docker stop mono-net45-app1
删除旧容器
docker rm mono-net45-app1
退出容器(或)

exit

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

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

相关文章

国内AI训练都有哪些企业?:技术深耕与场景实践

国内AI训练都有哪些企业?当人工智能从实验室走向产业一线,AI 训练就像为智能系统 “施肥浇水” 的关键环节,让技术根系在各行业土壤里扎得更深。国内一批 AI 训练企业正各展所长,有的专攻技术优化,有的深耕场景应用。它…

微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化

随着量子计算技术的发展,传统加密算法面临被量子计算机破解的风险,LSQb 算法也需考虑应对未来可能的量子攻击。微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化。格密码在面对量子…

xAI发布Grok4+代码神器Grok4 Code,教你如何在国内升级订阅SuperGrok并使用到Grok4教程

就在今天,马斯克旗下xAI发布了其最新的旗舰AI模型Grok4,并同步推出专为开发者打造的编程利器 Grok 4 Code,还推出了一项全新的AI订阅计划——每月300美元的SuperGrokHeavy。 那最新发布的Grok4以及有哪些特性呢?以及如何才能使用…

Rust 变量遮蔽(Variable Shadowing)

在 Rust 中,变量遮蔽(Variable Shadowing) 是一种在同一作用域内重新声明同名变量的特性。它允许你创建一个新变量覆盖之前的同名变量,新变量与旧变量类型可以不同,且旧变量会被完全隐藏。核心特点允许同名变量重复声明…

【VScode | 快捷键】全局搜索快捷键(ctrl+shift+f)失效原因及解决方法

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 😎金句分享😎&a…

Windows 与 Linux 内核安全及 Metasploit/LinEnum 在渗透测试中的综合应用

目录 🛠️ 1. 内核安全如何助力渗透测试与黑客行业 1.1 内核安全的战略价值 1.2 结合 Metasploit 与 LinEnum 的作用 🔍 2. Metasploit 信息收集模块及其在内核安全中的应用 2.1 Windows 信息收集模块 2.2 Linux 信息收集模块 2.3 使用步骤 Wind…

京东携手HarmonyOS SDK首发家电AR高精摆放功能

在电商行业的演进中,商品的呈现方式不断升级:从文字、图片到视频,再到如今逐渐兴起的3D与AR技术。作为XR应用探索的先行者,京东正站在这场体验革新的最前沿,不断突破商品展示的边界,致力于通过创新技术让消…

瞄准Win10难民,苹果正推出塑料外壳、手机CPU的MacBook

最近有消息称,苹果正在研发一款定位“低价”的MacBook,售价可能低于800美元(约合人民币5800元),采用的是A18 Pro芯片,也就是未来iPhone 16 Pro同款的“手机芯片”,而不是现有的M系列。这款产品预…

原子级 macOS 信息窃取程序升级:新增后门实现持久化控制

臭名昭著的 Atomic macOS Stealer(AMOS,原子级 macOS 窃取程序)恶意软件近期完成危险升级,全球 Mac 用户面临更严峻威胁。这款与俄罗斯有关联的窃密程序首次植入后门模块,使攻击者能维持对受感染系统的持久访问、执行远…

Shader面试题100道之(81-100)

Shader面试题(第81-100题) 以下是第81到第100道Shader相关的面试题及答案: 81. Unity中如何实现屏幕空间的热扭曲效果(Heat Distortion)? 热扭曲效果可以通过GrabPass抓取当前屏幕图像,然后在片…

C#洗牌算法

洗牌算法是一种将序列(如数组、列表)元素随机打乱的经典算法,核心目标是让每个元素在打乱后出现在任意位置的概率均等。在 C# 中,常用的洗牌算法有Fisher-Yates 洗牌算法(也称 Knuth 洗牌算法),…

Python PDFplumber详解:从入门到精通的PDF处理指南

一、PDFplumber核心优势解析 在数字化办公场景中,PDF文档处理是数据分析师和开发者的必备技能。相较于PyPDF2、pdfminer等传统库,PDFplumber凭借其三大核心优势脱颖而出: 精准表格提取:采用流式布局分析算法,支持复杂表…

Flutter 与 Android 的互通几种方式

Flutter 与 Android 的互通主要通过以下几种方式实现,每种方式适用于不同的场景:1. 平台通道(Platform Channels) Flutter 与原生 Android 代码通信的核心方式,支持双向调用。 类型: MethodChannel&#xf…

全新开源AI知识库系统!PandaWiki一键构建智能文档,支持AI问答、创作与搜索!

传统 Wiki 工具像一本厚重的“死书”,虽能存储信息,却无法主动「思考」。而在当今AI席卷各个行业的浪潮中,知识管理也迎来了智能化的巨大飞跃。最近开源圈悄然走红的 PandaWiki,就用 AI 大模型为知识库注入了 灵魂, 它…

Rust 结构体

Rust 结构体 引言 Rust 是一种系统编程语言,以其内存安全、并发支持和零成本抽象而闻名。结构体(struct)是 Rust 中用于创建自定义数据类型的工具。本文将深入探讨 Rust 结构体的概念、用法以及其在实际编程中的应用。 结构体的定义 在 Rust 中,结构体是一种复合类型,…

lstm 数据输入问题

lstm 我有 20*6 条数据,20个样本,每个样本6条历史数据,每条数据有5个值,我送给网络输入时应该是20*6*5 还是 6*20*5你的数据是:20 个样本(batch size 20)每个样本有 6 条历史数据(s…

WPF打包exe应用的图标问题

目录 1、WPF打包方法 2、图标问题 1、WPF打包方法 使用Microsoft Visual Studio Installer Projects 2022工具打包(成功),需要新建Setup Project项目进行打包 (46 封私信) [C#.net资料]visual studio打包可安装的exe程序(添加配置文件)&am…

Qt中处理多个同类型对象共享槽函数应用

一.Qt中处理多个同类型对象共享槽函数应用场景数字键盘按钮处理动态生成的控件管理工具栏按钮响应游戏中的网格点击处理使用时需特别注意对象生命周期管理和类型安全,现代Qt开发中更推荐使用Lambda表达式替代sender()机制。二.示例1.本文示例功能在ui界面添加5个&am…

康养休闲旅游服务实训室建设方案:理实一体化的产教融合方案

一、康养休闲旅游服务实训室建设方案建设原则对接行业真实场景:实训环境与设备设施严格参照健康咨询、旅行社及相关服务、住宿业、餐饮业等行业的真实职业场景搭建,确保实训项目与岗位工作内容高度匹配,实现工学结合、理实一体化教学。融合前…

微服务架构的演进:迈向云原生——Java技术栈的实践之路

随着云计算技术的快速发展,微服务架构正逐步向云原生(Cloud Native)演进。云原生不仅是一种技术体系,更是一种开发和运维理念的革新。本文将以Java技术栈为例,结合Kubernetes(K8s)、服务网格&am…