需求描述:

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

REF:
https://github.com/danielguerra69/ubuntu-xrdp/tree/16.04https://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://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 的代理环境。


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 中修改

windowsdocker怎么改中文 docker windows桌面_docker

3. 后续使用

  • 可以ssh 映射不同端口,选择不同的图形界面进行访问。
ssh -L 3389:localhost:3389  xxx@xxxx     # 远程服务器 GUI
ssh -L 3389:localhost:13389  xxx@xxxx   # 远程 docker GUI

各种报错 😖

  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

  1. dpkg-buildpackage: warning: using a gain-root-command while being rootdpkg-buildpackage: error: gain-root-commmand 'fakeroot' not foundbuild docker 时报错。 在开始, 安装fakeroot.
    RUN apt-get install -y fakeroot
  2. 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   # 新增权限