0. ubuntu 24.04 国内源
bash
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
先执行后,在更换 sources.list:
bash
apt update && \
apt install --reinstall ca-certificates && \
update-ca-certificates --fresh
/etc/apt/sources.list
apt update.
1. 安装 docker Engin
下载并执行安装 docker engine 的脚本
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
是否需要重启,不记得了。
拉取 docker image:
bash
sudo docker pull ubuntu:24.04
2. 创建容器
2.1. 事先不授权
测试行不通;
bash
sudo docker run -it --name test_X_01 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--net=host \
ubuntu:24.04
在宿主机执行 xhost +local:docker,然后 docker exec 进去,gedit 就能用了。dmesg 只能等重新创建容器时加权限。
bash
sudo docker exec -it -e DISPLAY=$DISPLAY test_X_01 bash
2.2. 充分授权方式
测试行得通;
如下命令在 Linux 的 GUI 桌面的 terminal 中执行:
bash
sudo docker run -it --name openroad_02 --privileged \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority:rw \
-v /home/eda/ex_openroad/tmp02:/home/ubuntu/tmp02 \
--net=host \
ubuntu:24.04
进入 容器后,执行如下:
bash
apt update
apt install gedit
# gedit hello.txt
这时会在桌面显示 gedit 的界面,效果跟 宿主机打开一个 gedit 的现象一样。
2.3. 部分授权方式
测试行不通
bash
docker run --cap-add=SYSLOG \
--cap-add=SYS_ADMIN \
...
bash
sudo docker run -it --name openroad_03 \
--cap-add=SYSLOG \
--cap-add=SYS_ADMIN \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--net=host \
-v /home/eda/ex_openroad/tmp03:/home/ubuntu/tmp03 \
ubuntu:24.04