docker中的linux容器实现窗口运行
# 一、在 Docker 容器中使用 X11 转发
允许你将 Linux 宿主机的 GUI 应用程序显示在宿主机的图形界面上,通常用于运行图形界面程序如桌面环境、IDE 或者某些需要图形界面的应用。
1. 确保你的 Linux 主机上安装了 X11 转发工具,如 `xauth` 和 `xhost`
```
sudo apt install xauth x11-apps
```
2. 配置 Docker 以允许 X11 转发,重启后会失效,***出现错误***,可以写入启动加载文件
```
xhost +local:root # 允许 root 用户从本地机器访问 X server,把当前sudo用户也加进来
```
# 二、创建容器
```
sudo docker run -it --name debian-desktop debian
```
**进入容器:**
```
sudo docker exec -it debian-desktop bash
```
**更换国内更新源**,参照https://m.wiseai.cn/topic/218
**安装桌面环境xfce:**
```
apt update && apt install -y \
xfce4 \
xfce4-goodies \
xorg \
openbox \
dbus \
dbus-x11 \
--no-install-recommends
```
**配置dbus**
```
mkdir -p /var/run/dbus
dbus-uuidgen --ensure
```
**在/bin/下建立start.sh并写入:**
```
#!/bin/sh
DBUS_SESSION_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket
export DBUS_SESSION_BUS_ADDRESS
#--config-file=/usr/share/dbus-1/system.conf这个参数有点问题
#dbus-daemon --system --config-file=/usr/share/dbus-1/system.conf --nofork --print-pid --print-address > /var/log/dbus.log 2>&1
dbus-daemon --system --nofork --print-pid --print-address > /var/log/dbus.log 2>&1
tail -f /dev/null
```
# 三、创建镜像
**一个中间镜像,用test命名**
```
sudo docker commit -m "test" -a "wiseai" debian-desktop test
```
**测试运行一次:**
```
sudo docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority:ro \
--name test \
test /bin/start.sh
sudo docker exec test xfce4-session
```
**安装必要程序:**
```
# 更新软件源
apt update
apt upgrade
# 安装常用中文字体包
apt install -y fonts-wqy-zenhei fonts-wqy-microhei fonts-arphic-ukai fonts-arphic-uming xfonts-intl-chinese
# 安装思源字体(可选)
apt install -y fonts-noto-cjk
# 刷新字体缓存
fc-cache -fv
apt install locales bash-completion
apt install pulseaudio pavucontrol
```
修改/etc/locale.gen,将zh_CN.UTF-8 UTF-8和en_US.UTF-8 UTF-8前的 `#`号去掉
```
locale-gen
```
**生成正式镜像**
```
sudo docker commit -m "desktop" -a "wiseai" test debian-desktop:v1
```
# **四、容器运行**
```
sudo docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority:ro \
--device /dev/snd:/dev/snd \
-e LANG=zh_CN.UTF-8 \
--volume /run/user/$(id -u)/pulse:/run/user/0/pulse \
-e PULSE_SERVER=unix:/run/user/0/pulse/native \
--name debian-desktop \
debian-desktop:v1
// 可添加--privileged参数,如果你需要完整的访问权限
// user/后面那个0,是容器里用户的id
```
运行后,直接关闭终端,因tail -f /dev/null的原因,没法结束
打开窗口界面
```
sudo docker exec debian-desktop xfce4-session
```
# 五、优化界面
1. 安装字体
```
# 更新软件源
sudo apt update
# 安装常用中文字体包
sudo apt install -y fonts-wqy-zenhei fonts-wqy-microhei fonts-arphic-ukai fonts-arphic-uming xfonts-intl-chinese
# 安装思源字体(可选)
sudo apt install -y fonts-noto-cjk
# 刷新字体缓存
sudo fc-cache -fv
```
- 共 0 条回复
- 需要登录 后方可回复, 如果你还没有账号请点击这里注册。
wiseAI
✨ 梦初醒 茅塞开
- 不经他人苦,莫劝他人善。
- 能量足,心态稳,温和坚定可以忍。
- 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
- 要么忙于生存,要么赶紧去死!
- 内心强大到混蛋,比什么都好!
- 规范流程比制定制度更重要!
-
立志需要高远,但不能急功近利;
行动需要迅速,却不可贪图速成。 - 不要强求人品,要设计高效的机制。
-
你弱的时候,身边都是鸡零狗碎;
你强的时候,身边都是风和日丽。 - 机制比人品更可靠,契约比感情更可靠。
- 合作不意味着没有冲突,却是控制冲突的最好方法。
- 误解是人生常态,理解本是稀缺的例外。
- 成功和不成功之间,只差一次坚持!
- 祁连卧北雪,大漠壮雄关。
- 利益顺序,过程公开,机会均等,付出回报。
