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

server/2024/9/23 6:26:17/

需求描述:

  • 我现在在远程连接 一台服务器,由于需要实验环境需要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

docker_xrdp__8">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://www.ppmy.cn/server/32934.html

相关文章

Topaz Video AI 5.0.3激活版 AI视频无损缩放增强

Topaz Video AI专注于很好地完成一些视频增强任务:去隔行,放大和运动插值。我们花了五年时间制作足够强大的人工智能模型,以便在真实世界的镜头上获得自然的结果。 Topaz Video AI 还将充分利用您的现代工作站,因为我们直接与硬件…

【c++】模板编程解密:C++中的特化、实例化和分离编译

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习模版的进阶部分 目录 1.非类型模版参数按需实例化 2.模版的特化函数模版特化函数模版的特化类模版全特化偏特化 3.分离编译模版分离编译 1.非类…

rust使用Atomic创建全局变量和使用

Mutex用起来简单,但是无法并发读,RwLock可以并发读,但是使用场景较为受限且性能不够,那么有没有一种全能性选手呢? 欢迎我们的Atomic闪亮登场。 从 Rust1.34 版本后,就正式支持原子类型。原子指的是一系列…

HTML_CSS学习:浮动

一、浮动简介 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>浮动_简介</title><style>div{width: 600px;height: 400px;background-color: #1c80d9;}img{float:…

Meta Llama 3 使用 Hugging Face 和 PyTorch 优化 CPU 推理

原文地址&#xff1a;meta-llama-3-optimized-cpu-inference-with-hugging-face-and-pytorch 了解在 CPU 上部署 Meta* Llama 3 时如何减少模型延迟 2024 年 4 月 19 日 万众期待的 Meta 第三代 Llama 发布了&#xff0c;我想确保你知道如何以最佳方式部署这个最先进的&…

如何为 Nestjs 编写单元测试和 E2E 测试

前言 最近在给一个 nestjs 项目写单元测试&#xff08;Unit Testing&#xff09;和 e2e 测试&#xff08;End-to-End Testing&#xff0c;端到端测试&#xff0c;简称 e2e 测试&#xff09;&#xff0c;这是我第一次给后端项目写测试&#xff0c;发现和之前给前端项目写测试还…

前端vue如何生成二维码

有时候有需要链接直接生成二维码在手机上看的需求&#xff0c;比如下载&#xff0c;比如信息&#xff0c;比如excel 下面先引入包 import QRCode from qrcode; 然后上代码 // 将res转换成二维码const qrCodeData JSON.stringify(res); // 将res转换为字符串作为二维码数据// …

头歌实践教学平台:三维图形观察OpenGL1.0

第1关&#xff1a;模型变换 一.任务描述 根据提示&#xff0c;在右侧修改代码&#xff0c;并自己绘制出图形。平台会对你编写的代码进行测试。 1.本关任务 学习了解三维图形几何变换原理。 理解掌握OpenGL三维图形几何变换的方法。 理解掌握OpenGL程序的模型视图变换。 掌握…