当前位置: 首页 > news >正文

【Docker】【2.docker 安装 ubuntu 桌面版】

一、目标

使用 docker 安装不同版本的 ubuntu .

可以通过 vnc 或者 直接在主机上显示。

二、使用 vnc 访问的方式

Dockerfile

FROM ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/ShanghaiRUN apt-get update && \apt-get install -y tzdata sudo vim wget curl net-tools dbus-x11 x11-apps && \apt-get install -y xfce4 xfce4-terminal tightvncserver && \apt-get clean && rm -rf /var/lib/apt/lists/*# 创建普通用户
RUN useradd -m -s /bin/bash dockeruser && \echo "dockeruser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoersUSER dockeruser
WORKDIR /home/dockeruser# 设置 VNC 密码
RUN mkdir -p /home/dockeruser/.vnc && \echo "1234" | vncpasswd -f > /home/dockeruser/.vnc/passwd && \chmod 600 /home/dockeruser/.vnc/passwd# 创建 xstartup 启动 XFCE
RUN echo '#!/bin/bash\n\
xrdb $HOME/.Xresources\n\
startxfce4 &' > /home/dockeruser/.vnc/xstartup && \chmod +x /home/dockeruser/.vnc/xstartup# 修正启动脚本(含 USER 环境变量 + 等待日志文件)
RUN echo '#!/bin/bash\n\
export USER=dockeruser\n\
export HOME=/home/dockeruser\n\
export DISPLAY=:1\n\
mkdir -p $HOME/.vnc\n\
vncserver :1 -geometry 1280x800 -depth 24\n\
echo "VNC server started on :1 (port 5901)"\n\
echo "To connect: vncviewer localhost:5901"\n\
# 等待日志文件创建\n\
for i in {1..10}; do\n\log_file=$(ls -1 $HOME/.vnc/*.log 2>/dev/null | head -n 1)\n\if [ -n "$log_file" ]; then\n\echo "Tailing log file: $log_file"\n\tail -f "$log_file"\n\exit 0\n\fi\n\sleep 1\n\
done\n\
echo "Warning: no VNC log file found."\n\
exec bash' > /home/dockeruser/start_vnc.sh && \chmod +x /home/dockeruser/start_vnc.shCMD ["/home/dockeruser/start_vnc.sh"]
#CMD ["startxfce4"]

编译

docker stop ubuntu20-xfce-vnc 2>/dev/null || true
docker rm ubuntu20-xfce-vnc 2>/dev/null || truedocker build -t ubuntu20-xfce-vnc .

启动docker

# 允许 X11 显示(可选)xhost +local:rootdocker run -it --rm \--name ubuntu20.4-vnc \-p 5901:5901 \ubuntu20-xfce-vnc

使用vnc连接

$ vncviewer localhost:5901
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Password: 

密码: 1234

在这里插入图片描述

三、使用 startxfce4 直接显示在 host 中

Dockerfile

FROM ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/ShanghaiRUN apt-get update && \apt-get install -y tzdata sudo vim wget curl net-tools dbus-x11 x11-apps && \apt-get install -y xfce4 xfce4-terminal tightvncserver && \apt-get clean && rm -rf /var/lib/apt/lists/*# 创建普通用户
RUN useradd -m -s /bin/bash dockeruser && \echo "dockeruser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoersUSER dockeruser
WORKDIR /home/dockeruser# 设置 VNC 密码
RUN mkdir -p /home/dockeruser/.vnc && \echo "1234" | vncpasswd -f > /home/dockeruser/.vnc/passwd && \chmod 600 /home/dockeruser/.vnc/passwd# 创建 xstartup 启动 XFCE
RUN echo '#!/bin/bash\n\
xrdb $HOME/.Xresources\n\
startxfce4 &' > /home/dockeruser/.vnc/xstartup && \chmod +x /home/dockeruser/.vnc/xstartup# 修正启动脚本(含 USER 环境变量 + 等待日志文件)
RUN echo '#!/bin/bash\n\
export USER=dockeruser\n\
export HOME=/home/dockeruser\n\
export DISPLAY=:1\n\
mkdir -p $HOME/.vnc\n\
vncserver :1 -geometry 1280x800 -depth 24\n\
echo "VNC server started on :1 (port 5901)"\n\
echo "To connect: vncviewer localhost:5901"\n\
# 等待日志文件创建\n\
for i in {1..10}; do\n\log_file=$(ls -1 $HOME/.vnc/*.log 2>/dev/null | head -n 1)\n\if [ -n "$log_file" ]; then\n\echo "Tailing log file: $log_file"\n\tail -f "$log_file"\n\exit 0\n\fi\n\sleep 1\n\
done\n\
echo "Warning: no VNC log file found."\n\
exec bash' > /home/dockeruser/start_vnc.sh && \chmod +x /home/dockeruser/start_vnc.sh#CMD ["/home/dockeruser/start_vnc.sh"]
CMD ["startxfce4"]

编译

docker stop ubuntu20-xfce-vnc 2>/dev/null || true
docker rm ubuntu20-xfce-vnc 2>/dev/null || truedocker build -t ubuntu20-xfce-vnc .

启动 docker

#!/bin/bash
docker stop ubuntu-xfce-vnc 2>/dev/null || true
docker rm ubuntu-xfce-vnc 2>/dev/null || true
set -e# 允许 X11 显示(可选)
xhost +local:root# 启动容器
docker run -it --rm \--name ubuntu-xfce-vnc \--network host \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix:/tmp/.X11-unix \-v $HOME:/home/dockeruser/host_home \ubuntu20-xfce-vnc startxfce4

此时在主机上会出现, 下面的内容,表示你已经 将 docker 的输出显示在自己的主机里面了。
在这里插入图片描述

强制杀死 startxfce4

pkill -f xfce; pkill xfce4-session; ps aux | grep xfce
http://www.dtcms.com/a/544407.html

相关文章:

  • 单片机上的动态数码管
  • 怎么创建网站相册甘肃网站建设项目
  • 前端三剑客之一 CSS~
  • 仓颉语言运算符使用方法详解
  • 视频编码原理
  • 房管局网站建设网站备案要求
  • 2025-TMLR-Piecewise Constant Spectral Graph Neural Network
  • MATLAB(Matrix Laboratory,矩阵实验室)
  • 未来之窗昭和仙君(四十二)开发布草管理系统——东方仙盟筑基期
  • 我国哪些网站是做调查问卷的望野于春
  • Techviz在虚拟现实中实时验证人机工程学设计
  • 自定义注解结合策略模式实现数据脱敏
  • 【金仓数据库产品体验官】Apache James适配金仓数据库
  • VR公共安全学习机-VR校园健康饮食科普系统-VR食品安全体验系统
  • 【微服务】SpringBoot 整合Neo4j 图数据库项目实战详解
  • 模板网站系统wordpress首页描述
  • 图书网站策划书网站的维护方案
  • 【Android】Android Framework 的那些核心子系统及其功能详解
  • Android车载多媒体开发MediaSession框架理解
  • 掌握Axios:前端HTTP请求全攻略
  • 产业链、技术与政策:智能网联新能源汽车的“十五五”蓝图
  • 20251029让AIO-3576Q38开发板适配Rockchip的原厂Android14之后配置为禁止锁屏
  • 解析视频融合平台EasyCVR如何以跨平台与兼容性技术重构安防融合中台
  • SQlite:外键约束
  • linux命令-网络工具-3
  • Android 通信机制简析
  • C++ 虚函数的使用开销以及替代方案
  • 椒江网站建设百度手机助手app安卓版官方下载
  • 柯桥做网站的公司怎么查网站是用什么语言做的
  • Unity功能篇:UI和模型高亮