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

news/2024/9/24 11:16:12/

需求描述:

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

相关文章

mac nvm install node<version> error 404

mac m2芯片遇到的问题,估计m系列的应该也有这个问题,在这里记录一下 解决方案: ## 需要先处理一下兼容就OK了arch -x86_64 zsh nvm install returns curl: (22) The requested URL returned error: 404 Issue #2667 nvm-sh/nvm GitHub

SSH远程登录实操实验!

ssh远程登录协议:默认端口号22 以下实验7-2是服务端,7-1是客户端 服务器的相关信息: 服务名称:sshd 服务端主程序:/usr/sbin/sshd 服务端配置文件:/etc/ssh/sshd_config 客户端相关信息: …

银行ETL-监管报送

1104报表 1104报表主要包括:资产负债,表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类:疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

贪吃蛇(上)Win32API

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一、Win32 API二、地图的绘制和初始化总结 前言 贪吃蛇(也叫做贪食蛇)游…

【计算机网络】因特网概述

一.发展的三个阶段 二.ISP介绍 因特网服务提供者(Internet Service Provider),简称ISP,普通用户是通过 ISP 接入到因特网的,ISP 可以从因特网管理机构申请到成块的 IP 地址,同时拥有通信线路以及路由器等连…

selenium软件测试验证码处理

七、验证码7.1 什么是验证码?一种随机生成信息(文字、数字、图片)7.2 验证码作用防止恶意请求7.3 验证码处理方式1. 去掉验证码(项目在测试环境、公司自己的项目)2. 设置万能验证码(测试环境或线上环境,公司自己项目)3. 使用验证码识别技术 (由于现在的验…

React 之 useMemo Hook (九)

useMemo 是 React 的一个Hook,它允许你“记住”一些计算值,只有在依赖项之一发生变化时才会重新计算这些值。这有助于避免不必要的重新计算和渲染,从而提高应用程序的性能。 代码栗子(计算一个斐波那契数列的值)&#…

数据库练习题,有答案有解析,100分,60单选,20判断,20填空

1、普通索引描述正确的是(1 分) A.对空间数据类型的字段建立的索引 B.基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值 C.索引列中的值必须是唯一的,但是允许为…