远程服务器 docker XRDP 桌面访问 记录

需求描述:

  • 我现在在远程连接 一台服务器,由于需要实验环境需要GUI桌面系统,但是又想在 docker 中运行。
  • 因此,我现在首先需要通过 ssh 连接服务器,然后再服务器中连接 docker.

REF:
https://github.com/danielguerra69/ubuntu-xrdp/tree/16.04
https://blog.csdn.net/weixin_45481037/article/details/134684379?spm=1001.2014.3001.5501

1. 创建 docker xrdp 镜像。

xrdp-docker 只需要基础的Ubuntu镜像就可以,我换成了自己需要的ubuntu-cuda 镜像也是没问题的

FROM ubuntu:16.04      # 默认镜像
-----
FROM nvidia/cudagl:10.1-devel-ubuntu16.04  # 更换的 base img

NOTE:

  • 需要安装 fakeroot, 报错 2, RUN apt-get install -y fakeroot
  • 需要 给权限,报错 3
  • 国内需要更换 github 镜像,一共两个( ubuntu-16.04 )
    • 使用国内镜像 clone : https://blog.csdn.net/qq_41071191/article/details/121367039
    https://github.com/neutrinolabs/xrdp.git
    https://github.com/neutrinolabs/xorgxrdp.git
    ----
    https://gitclone.com/github.com/neutrinolabs/xrdp.git
    https://gitclone.com/github.com/neutrinolabs/xorgxrdp.git
    

编译dockerfile

  • 默认编译
    docker build -t xrdp_img -f habitat_GUI.dockerfile .
    ----
    -t: 编译img 的名称(tag)
    -f: 变成 dockerfile 的文件
    . : 在当前目录下
    
  • 使用 proxy 编译
    • 因为 dockerfile 中 要下载 github 文件,上面的gitclone镜像不好使了。由于 docker build 是自己创建一个container 进行编译,所以,需要配置编译时的网络。
    • docker build -t xrdp_img --network host -f habitat_GUI.dockerfile .
    • 运行上面命令之前,需要现在本地配置好代理环境,同时需要设置好 docker 的代理环境。
      • https://kebingzao.com/2019/02/22/docker-container-proxy/
      • https://simpleapples.com/2019/04/18/building-docker-image-behind-proxy/

2. 创建container 并连接

  • docker run -d --name uxrdp --hostname terminalserver --shm-size 1g -p 13389:3389 -p 2222:22 xrdp_img
    • docker 绑定了两个端口。
      • 将 docker 的 3389 端口和 服务器的13389 端口绑定。 docker 的 3389 端口用于xrdp 连接。
      • 将 docker 的 22 端口和服务器的 2222 端口绑定。 docker 的 22 端口用于 ssh 连接
      • 因为主机的 3389 和 22 端口都是用于自己的xrdp 和 ssh连接,所以我们不能使用这两个端口,需要更换到 13389 端口(随便选择的)。当我们访问主机的13389 端口,相当于访问 docker 的 3389 端口

  • 远程 ssh 连接, 绑定端口(端口映射)

    ssh -L 3389:localhost:13389  xxx@xxxx
    ssh -L 3389:localhost:13389 -p 12222 xxx@xxxx
    
    • 需要将 本地 3389 端口和 服务器的13389 端口绑定,即本地的3389 和 docker 的3389 绑定。
  • 通过windows xrdp 就可以连接了。

    • 默认user 和 密码都是 ubuntu
    • 可以在dockerfile 中修改

在这里插入图片描述

3. 后续使用

  • 可以ssh 映射不同端口,选择不同的图形界面进行访问。
    ssh -L 3389:localhost:3389  xxx@xxxx     # 远程服务器 GUI
    ssh -L 3389:localhost:13389  xxx@xxxx   # 远程 docker GUI
    
    本地 xrdp 连接参数不用更改,非常方便。

各种报错 😖

  1. W: GPG error: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC

    解决方法,在 apt update 之前删除 nivida 源

    RUN rm /etc/apt/sources.list.d/cuda.list
    RUN rm /etc/apt/sources.list.d/nvidia-ml.list
    

    https://github.com/NVIDIA/nvidia-container-toolkit/issues/257

  2. dpkg-buildpackage: warning: using a gain-root-command while being root
    dpkg-buildpackage: error: gain-root-commmand 'fakeroot' not found

    build docker 时报错。 在开始, 安装fakeroot.
    RUN apt-get install -y fakeroot


  3. 2024-05-04 10:45:32.877 [error] Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/usr/bin/docker-entrypoint.sh": permission denied: unknown Error: failed to start containers: bc264b4a0d518933f5e7c306d26423282db0e657dcd6c17fab1d76eb519a3644

    可以正常 build image,但是实例化 container 时,报错,提示权限不够。在dockerfile 中增加权限。

    ADD bin /usr/bin        
    RUN chmod +x /usr/bin/docker-entrypoint.sh   # 新增权限
    

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

3D相机及应用

无论是2D相机和3D相机,在工业应用中都有着不可或缺的作用。3D相机与2D相机的最大区别在于,3D相机可以获取真实世界尺度下的3D信息,而2D相机只能获取像素尺度下的2D平面图像信息。通过3D相机得到的数据,我们可以还原出被测量物体的…

NumPy及Matplotlib基本用法

NumPy及Matplotlib基本用法 导语NumPy导入与生成算术运算N维数组广播元素访问 Matplotlib简单图案绘制多函数绘制图像显示参考文献 导语 深度学习中经常需要对图像和矩阵进行操作,好在python提供了Numpy和Matplotlib库,前者类似一个已经定义的数组类&am…

基于Springboot+Vue的Java项目-鲜牛奶订购系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

资料总结分享:SAM,bam,bed文件格式

目录 sam文件 bam文件 bed 文件 sam文件 SAM(Sequence Alignment/Map)文件是存储测序数据比对结果的一种常见格式。SAM文件通常用于存储DNA或RNA测序数据在参考基因组上的比对结果。 SAM文件由多行文本组成,每一行代表一个比对结果。SAM文…

.[[MyFile@waifu.club]].svh勒索病毒数据库恢复方案

.[[MyFilewaifu.club]].svh勒索病毒有什么特点? .[[MyFilewaifu.club]].svh是一种最近多发的勒索病毒,它通过加密受害者的文件并要求支付赎金来解锁,从而达到勒索钱财的目的。恢复重要数据请添加技术服务号(safe130)。以下是关于这种病毒的详…

数字社交风潮:解析Facebook的影响力

随着互联网的普及和科技的发展,数字社交媒体已经成为现代社会不可或缺的一部分。在众多的社交媒体平台中,Facebook作为其中的佼佼者,影响着数以亿计的用户。本文将深入解析Facebook的影响力,探讨其在数字社交风潮中的地位和作用。…

Python网络协议socket

01 协议基础 01 网络协议 协议:一种规则 网络协议:网络规则,一种在网络通信中的数据包的数据规则 02 TCP/IP协议 osi模型 tcp/ip协议 03 tcp协议 TCP协议提供了一种端到端的、基于连接的、可靠的通信服务。 三次握手 创建连接 四次挥手…

Internet接入技术

internet接入技术 发展 1960s-1980s 早期互联网雏形ARPANET发展,主要限于研究机构和大学之间,通过专用线路连接。 1990s初期 拨号接入开始普及,用户通过电话线和调制解调器以低速(起初为14.4Kbps,后来提升到56Kbps&a…

unity华为sdk接入指路指南

目前比较靠谱的几个方案:试过几个仅供参考 温馨提示:最高目前可支持方案到unity2021版本以下,以上请联系华为官方寻求技术支持 Unity集成华为游戏服务SDK方式(一):集成Unity官方游戏SDK: 华为…

SQL查询语句(二)逻辑运算关键字

上一篇文章中我们提到了条件查询除了一些简单的数学符号之外,还有一些用于条件判断的关键字,如逻辑判断 关键字AND,OR,NOT和范围查找关键字BETWEEN,IN等;下面我们来介绍一些这些关键字的用法以及他们所表达的含义。 目录 逻辑运算关键字 AND…

Python类方法探秘:从单例模式到版本控制

引言: 在Python编程中,类方法作为一种特殊的实例方法,以其独特的魅力在众多编程范式中脱颖而出。它们不仅提供了无需实例即可调用的便捷性,还在设计模式、版本控制等方面发挥着重要作用。本文将通过几个生动的示例,带您…

搭建Springboot的基础开发框架-01

本系列专题虽然是按教学的深度来定稿的,但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries:父工程,定义一…

医药垃圾分类管理系统|基于SSM医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)

医药垃圾分类管理系统 目录 基于SSM医药垃圾分类管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统登录模块 2管理员模块实现 3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博…

【C语言】精品练习题

目录 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 题目八: 题目九: 题目十: 题目十一: 题目十二: 题目十…

HarmonyOS开发案例:【计算器】

介绍 基于基础组件、容器组件,实现一个支持加减乘除混合运算的计算器。 说明: 由于数字都是双精度浮点数,在计算机中是二进制存储数据的,因此小数和非安全整数(超过整数的安全范围[-Math.pow(2, 53),Math.…

董事长张轶群刚被罚,合规问题屡见不鲜,富友支付IPO胜算几何?

第三方支付机构富友支付又双叒来冲刺上市了。 与此前两次冲刺A股不同的是,富友支付此次选择在港股上市。近日,富友支付向港交所主板递交上市申请,联席保荐人为中信证券、申万宏源香港。值得一提的是,此前的2018年、2021年&#x…

【C++】从零开始认识多态

送给大家一句话: 一个犹豫不决的灵魂,奋起抗击无穷的忧患,而内心又矛盾重重,真实生活就是如此。 ​​​​ – 詹姆斯・乔伊斯 《尤利西斯》 _φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)&…

Redis(Redis配置和订阅发布)

文章目录 1.Redis配置1.网络配置1.配置文件位置 /etc/redis.conf2.bind(注销支持远程访问)1.默认情况bind 127.0.0.1 只能接受本机的访问2.首先编辑配置文件3.进入命令模式输入/bind定位,输入n查找下一个,shift n查找上一个&…

SpringBoot的@Async注解有什么坑?

前言 SpringBoot中,Async注解可以实现异步线程调用,用法简单,体验舒适。 但是你一定碰到过异步调用不生效的情况,今天这篇文章总结了Async注解的坑点,希望对你会有所帮助。 未启用异步支持 Spring Boot默认情况下不启…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部,我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false,固定页面不会因为键盘弹出而移动 效果图如下