Docker+MobaXterm+x11实现容器UI界面转发本地

本文记录了搭建一个可直接ssh访问的container,并可通过x11转发界面的实现过程

0.1 实验环境

PC:windows 11

Server:Ubuntu 18.04

Docker image:Ubuntu 18.04

  1. 获取Ubuntu 18.04的镜像

使用Dockerfile获取镜像,对应的文件内容如下

Get the base Ubuntu image from Docker Hub

FROM ubuntu:18.04

FROM continuumio/anaconda3:latest

LABEL maintainer="hello@hello.edu"

ENV DEBIAN_FRONTEND=noninteractive

Update apps on the base image

RUN apt-get -y update

Packages

RUN apt-get install -y autoconf automake autotools-dev curl libmpc-dev libmpfr-dev \

libgmp-dev gawk build-essential bison flex texinfo gperf \

libtool patchutils bc libqt4-dev python-dev flex bison \

libgoogle-perftools-dev python-six libssl-dev zlib1g-dev \

zip unzip zsh tmux wget git openssh-client vim emacs \

default-jdk default-jre

RUN echo "deb https://dl.bintray.com/sbt/debian /" | tee -a /etc/apt/sources.list.d/sbt.list && \

curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get\&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | apt-key add && \

apt-get update && \

apt-get install sbt

在Dockerfile的同一目录下执行如下命令即可

docker build -t Ubuntu:18.04 .

  1. 使用镜像生成容器并配置端口转发

我们的需求是,可以直接通过ssh访问生成的ubuntu 18.04 container,因此需要将容器的ssh端口暴露到server的某个端口上,这样做有很多好处,最主要的是直接通过Xterm上传下载container中的文件,而不用使用docker cp命令,同时也可以支持x11转发UI界面。使用的命令如下

docker run -it --privileged=true -p 50002:22 --hostname=<host name> --name=<container name> Ubuntu:18.04 /bin/bash

这里将容器的22端口转发给server的50002端口,以后直接ssh server:50002就可以直接进这个container

Note:退出重进container的命令如下

sudo docker start <container name>

sudo docker attach <container name>

更新美化Ubuntu的一系列操作可见我另一篇博文

  1. 配置ssh

需要重新安装一下ssh,我碰到的问题是没有sshd\_config文件,使用如下命令

rm -rf /etc/ssh

apt install ssh

然后配置ssh支持x11转发

echo "Port 22">>/etc/ssh/sshd_config

echo "PermitRootLogin yes">>/etc/ssh/sshd_config

echo "X11Forwarding yes" >> /etc/ssh/sshd_config

重新启动ssh服务

service ssh restart

查看ssh服务状态

service ssh status

接下来设定root的密码,以便远程登陆

passwd

  1. 配置界面转发

到这里为止,已经可以使用Xterm登录了,但是界面转发还是问题,需要指明转发目标,增加如下环境变量即可

export DISPLAY=:<Your PC IP Addr>:0.0

相关推荐
AI云原生10 分钟前
云原生系列Bug修复:Docker镜像无法启动的终极解决方案与排查思路
运维·服务器·python·docker·云原生·容器·bug
啊啊啊啊8431 小时前
k8s lngress与安全机制
安全·容器·kubernetes
三坛海会大神5551 小时前
k8s(八)Ingress详解
云原生·容器·kubernetes
荣光波比1 小时前
K8S(十三)—— Helm3从入门到实战:简化Kubernetes应用部署与管理
云原生·容器·kubernetes
tryCbest6 小时前
CentOS部署Docker容器
linux·docker·centos
菠萝炒饭pineapple-boss7 小时前
单机让多docker拥有多ip出口
docker
007php0079 小时前
百度面试题解析:微服务架构、Dubbo、Redis及其一致性问题(一)
redis·百度·docker·微服务·容器·职场和发展·架构
Element_南笙9 小时前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
SmartSoftHelp开发辅助优化10 小时前
C# WinForm 编程高手:程序,进程,线程。程序,窗体,UI,后台。是如何协调工作的?深度解析>SmartSoftHelp魔法精灵工作室
microsoft·ui·c#
阑梦清川11 小时前
es的docker部署和docker相关的可可视化面板工具介绍
大数据·elasticsearch·docker