运行Docker时无法在Mac上打开远程显示

时间:2018-11-13 08:07:46

标签: macos docker

我有一个如下编写的Dockerfile:

FROM     joesan/raspi_opencv_3:latest
RUN      apt-get update
RUN      sudo apt-get install --no-install-recommends xserver-xorg
RUN      sudo apt-get install --no-install-recommends xinit
RUN      apt-get install -qqy x11-apps
RUN      mkdir -p /raspi_motion_detection/project
WORKDIR  /raspi_motion_detection/project
COPY     ./ $WORKDIR/
COPY     ./requirements.txt $WORKDIR/
ADD      . $WORKDIR
CMD      xclock

我有一个Raspberry Pi,可以从Mac(运行High Sierra)中切换到该Raspberry Pi。

这是我的工作:

  1. 我从Mac SSH到RaspPi
  2. 我使用以下命令执行docker命令:
docker run -ti --device=/dev/vcsm \
--device=/dev/vchiq \
-e DISPLAY=$DISPLAY:0 \
-e XAUTHORITY=/.Xauthority \
-v /tmp/.X11-unix:/tmp/.X11-unix \
joesan/motion_detector
  1. 我收到如下错误消息:

    错误:无法打开显示:localhost:11.0:0

  2. 但是当我直接在ssh终端上运行xclock时,我看到xclock窗口打开了。

所以我不明白为什么从Docker容器中运行xclock会阻止显示端口打开?有什么原因吗?我也在这里碰到过这篇文章,并按照那里的描述进行操作,但是我无法使它正常工作!

https://medium.com/@dimitris.kapanidis/running-gui-apps-in-docker-containers-3bd25efa862a

2 个答案:

答案 0 :(得分:0)

有点简化:每个docker容器都在docker守护程序内部运行,该守护程序基本上为每个容器提供了一个简化的操作系统。那个操作系统没有窗口管理器。

这就是为什么Docker容器内的命令xclock退出并显示错误。

当您通过ssh连接到树莓派并调用xclock时,它将在树莓派的os(可能是树莓派)操作系统中执行,该操作系统具有运行中的窗口管理器。

答案 1 :(得分:0)

好!所以我想我找到了解决问题的方法!这就是我所做的!

  1. 在我的SD卡上重新安装了Raspberry Stretch Lite。旧的文件似乎已经过时了!您可以跳过此步骤,但是对我而言,旧安装中存在一些损坏的文件,因此我决定进行全新安装!

  2. 在我的Raspberry Pi上,运行以下命令:

    xauth列表

    我以后将cookie本地复制到文本编辑器中!

  3. 从我最初拥有的Dockerfile中删除了xclock命令!

  4. 使用以下命令构建Dockerfile:

  

docker run -it --net = host --device = / dev / vcsm --device = / dev / vchiq -e   显示-v /tmp/.X11-unix joesan / motion_detector bash

请注意,我正在对Docker运行一个bash命令,以便可以从正在运行的映像中获得basj提示!

  1. 第3步的结果会从我刚刚在第3步运行的容器中给我一个bash提示

  2. 我现在需要在映像中安装xauth

  

apt-get install xauth

  1. 然后我从步骤0添加xauth cookie

是在这次爆炸之后!我得到了我想要的东西!