以下操作均在 ubuntu20.04环境中。打开x11图形化窗口的前提是本地已经安装好x11环境。

如果需要远程的是已经存在的docker,首先提交一个当前docker的镜像,然后再重新创建容器。

如果是新建docker容器,则直接创建容器即可。

注意创建容器的时候指定映射容器的22号端口,以便我们可以直接ssh进入docker。

1
2
3
4
5
6
7
8
# 对于已经存在的docker容器:
# 提交docker镜像
$ docker commit [docker_id] <自定镜像名>
# 根据存在的镜像创建容器
$ docker run -dit -p 2221:22 <自定镜像名> /bin/bash

# 对于新建的docker容器
$ docker run -dit -p 2221:22 ubuntu:20.04 /bin/bash

进入docker后,设置root用户密码,安装x11环境,安装 ssh-server

1
2
3
4
5
6
7
8
9
10
11
12
# 设置root用户密码
$ passwd
# 更新apt
$ apt-get upgrade
$ apt-get update

# 安装x11环境
$ apt install xorg
# 安装ssh-server
$ apt-get install openssh-server
# 重启ssh
$ service ssh restart

若执行命令 service ssh restart时出现以下错误:

1
sshd: no hostkeys available -- exiting.

解决方法:

1
$ ssh-keygen -A

若出现以下错误:

1
Missing privilege separation directory: /run/sshd

解决方法:

1
$ mkdir /run/sshd

修改ssh配置文件 /etc/ssh/sshd_config

1
2
3
4
5
$ vim /etc/ssh/sshd_config
# 找到并修改成以下内容
PermitRootLogin yes
AllowTcpForwarding yes
X11Forwarding yes

打开 terminal,并且ssh尝试远程进入 docker

1
2
# 输入 -Y 参数来打开 x11
$ ssh -Y root@[server_ip] -p 2221

如果能成功进入,测试x11.

1
$ xclock

如果弹出时钟界面,则已经成功。

如果此时报出以下错误:

1
Error: Can't open display:

则重新编辑文件 /etc/ssh/sshd_config

1
2
# 找到并修改成以下内容
X11UseLocalhost no

重启ssh服务,再次测试即可。