我已经创建了最简单的(最小工作示例)Dockerfile
来在我的 Ubuntu 16.04 LTS 主机系统上使用 19.10 内部容器运行图形应用程序:
mkdir ~/docker-xclock
cat > ~/docker-xclock/Dockerfile << EOF
FROM ubuntu:19.10
RUN apt-get update
RUN apt-get install -y x11-apps
CMD xclock
EOF
然后使用以下方法创建容器
docker build -t ubuntu:xclock ~/docker-xclock
当我尝试运行此容器时,它会显示有关显示的错误:
$ docker run ubuntu:xclock Error: Can't open display:
怎么了?
答案1
我们需要使用特殊语法[1]通知容器在主机上运行X11服务器:
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:xclock
其中[2]:
-e,--env = []
设置环境变量
-u,--用户=“”
设置使用的用户名或 UID,以及指定命令的组名或 GID(可选)。
-v|--卷[=[[主机目录:]容器目录[:选项]]]
创建绑定挂载。如果指定 -v /HOST-DIR:/CONTAINER-DIR,Docker 会将主机中的 /HOST-DIR 绑定挂载到 Docker 容器中的 /CONTAINER-DIR。如果省略“HOST-DIR”,Docker 会自动在主机上创建新卷。OPTIONS 是一个逗号分隔的列表,可以是:
参考:
完整可重复的解决方案:
mkdir ~/docker-xclock
cat > ~/docker-xclock/Dockerfile << EOF
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y x11-apps
CMD xclock
EOF
docker build -t ubuntu:xclock ~/docker-xclock
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:xclock
答案2
如果仍然出现类似错误:
No protocol specified
Error: Can't open display: :0
确保你跑
$ xhost local:docker
*-从https://github.com/jessfraz/dockerfiles/issues/6#issuecomment-266230114
答案3
Dockerfile
在文件夹中创建docker-xclock
。
mkdir ~/docker-xclock
cat > ~/docker-xclock/Dockerfile << EOF
FROM ubuntu:19.04
ENV https_proxy="xxx"
ENV http_proxy="xxx"
ENV no_proxy="xxx"
RUN apt-get update
RUN apt-get install -y x11-apps
CMD xclock
EOF
docker build -t ubuntu:xclock ~/docker-xclock
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:xclock
注意:ubuntu:xclock
放在命令末尾。使用 X11 进行 GUI 交互。