本文记录了搭建一个可直接ssh访问的container,并可通过x11转发界面的实现过程
0.1 实验环境
PC:windows 11
Server:Ubuntu 18.04
Docker image:Ubuntu 18.04
- 获取Ubuntu 18.04的镜像
使用Dockerfile获取镜像,对应的文件内容如下
Get the base Ubuntu image from Docker Hub
FROM ubuntu:18.04
FROM continuumio/anaconda3:latest
LABEL maintainer="[email protected]"
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 .
- 使用镜像生成容器并配置端口转发
我们的需求是,可以直接通过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的一系列操作可见我另一篇博文
- 配置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
- 配置界面转发
到这里为止,已经可以使用Xterm登录了,但是界面转发还是问题,需要指明转发目标,增加如下环境变量即可
export DISPLAY=:<Your PC IP Addr>:0.0