Docker X11前进获取空白屏幕

问题描述 投票:0回答:1

[我正在尝试使用docker包含我的应用,并转发x11以使用chromedriver生成Chrome。我可以使浏览器产生,但是其产生的所有内容都是空白。上下文菜单也为空白。它关闭而不会崩溃。

介绍性信息:(可以跳过)

[我有一个应用程序(django + postgresql + supervisor + uwsgi + celery + redis + nginx + selenium),该应用程序通过带有Selenium的Chromedriver通过Chromedriver生成了Chrome / Chromium浏览器,并在不同的预加载用户数据目录(带有预加载会话)中打开了它们和登录),并在不同的网站上执行一些自动化操作。

一切在我的计算机上都能流畅,清晰地工作。

[一些同事要我将其安装到我的应用程序中。我告诉他们它只能在Linux上运行,因为我是在Linux上开发的,所以我不确定在Windows上是否一切都能正常工作。

他们中的1个人安装了Ubuntu之后,我尝试使用我的私人git repo进行共享/更新,并使用源代码安装所有内容,这非常痛苦。

[首先,我在安装正确的Python版本时遇到了麻烦,之后,主管无法按我的预期工作。每个步骤都会带来不同的麻烦,应用程序本身也会呈现一些我在自己的环境中没有的错误。

麻烦本身:(可以在这里开始阅读)

因此,经过大量阅读后,我认为Docker非常适合,即使它并非旨在打开台式机应用程序也是如此。单个X11转发器可以解决此问题。

我直接使用Docker-compose文件(以加快并行进程的设置)。这实际上是我第一次使用docker,感觉真的很简单。我制作了一个Dockerfile和一个docker-compose文件,该文件可以设置所有内容(正确的python版本,chrome / chromedrivers及其依赖项)以及除Chrome之外的所有其他功能。

在使用X11重定向进行了一些挖掘和测试之后,我可以使我的应用程序启动Chrome并在主机计算机中生成Chrome窗口,但是该窗口本身为空白。即使右键单击,打开的上下文菜单也全部为空白。

我在主机上运行了xhost +local:root,但无法解决问题。

我在这里阅读了第3部分中的http://wiki.ros.org/docker/Tutorials/GUI。以一种孤立的方式,我应该做这样的事情

```XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

docker run -it \
        --volume=$XSOCK:$XSOCK:rw \
        --volume=$XAUTH:$XAUTH:rw \
        --env="XAUTHORITY=${XAUTH}" \
        --env="DISPLAY" \
        -user="myNewUserName" \
    osrf/ros:indigo-desktop-full \
    rqt```

但是我不确定我应该如何在docker-compose文件中执行xauth列表中的内容(或者我应该在哪里?)。我实际上不是100%知道我的问题在xauth中。

这是我的docker文件:我选择Python 3.7.4-slim-strech,因为它:*为我提供正确的python版本* Debian可以从其存储库安装铬和chromedriver(铬版本73)*它是我为自己的需求而找到的最简单的设置


FROM python:3.7.4-slim-stretch

RUN apt-get update && apt-get install -y chromium chromedriver build-essential

ENV PYTHONUNBUFFERED 1

# My Actual System Username, i've also tested with other username and i have the same issue
ENV USERNAME "gabriel"

# These UID and GID match mines
RUN export uid=1000 gid=1000 && \
    addgroup \
     --system \
     --gid ${gid} \
       ${USERNAME} && \
    adduser \
     --system \
     --uid ${uid} \
     --shell /bin/bash \
     --gid ${gid} \
       ${USERNAME} && \
    usermod -aG sudo ${USERNAME} && \
    passwd -d ${USERNAME}

RUN mkdir /app && \
    mkdir /config && \
    mkdir -p /var/www/static

ADD ./config /config
RUN pip install -r /config/requirements.pip

RUN chown -R ${uid}:${gid} /app && \
    chown -R ${uid}:${gid} /config && \
    chown -R ${uid}:${gid} /var/www && \
    chmod +x /config/application_launch.sh

USER ${USERNAME}
ENV HOME /home/${USERNAME}

WORKDIR /app

ADD ./src /app

这是我的码头工人组成文件:


services:
  db:
    image: postgres
    container_name: ps01

  supervisor:
    build: .
    command: supervisord -c /config/supervisord.conf
    volumes:
      - ./src:/app
      - ./src/static:/var/www/static
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
    ports:
      - "9001:9001"
    expose:
      - "8000"
    depends_on:
      - db
    extra_hosts:
      - "yangoo.network:10.68.0.1"
    container_name: su01
    environment:
      - DISPLAY
      - UID
      - QT_X11_NO-MITSHM=1

  nginx:
    image: nginx
    container_name: wb01
    ports:
      - "80:80"
    volumes:
      - ./src:/app
      - ./config/nginx:/etc/nginx/conf.d
      - ./src/static:/var/www/static
    depends_on:
      - supervisor
    links:
      - supervisor

编辑

将我的发行版升级到popos 19.04修复了黑屏问题。我也可以使它在带有更新的Linux发行版的虚拟机中工作。该问题似乎仅在较早的发行版中存在。

python docker docker-compose x11 x11-forwarding
1个回答
0
投票

有一个Chromium错误:https://bugs.chromium.org/p/chromium/issues/detail?id=1048186

根据评论,将ipc: host添加到docker-compose中的主管配置中将起作用:

supervisor:
    build: .
    command: supervisord -c /config/supervisord.conf
    volumes:
      - ./src:/app
      - ./src/static:/var/www/static
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
    ports:
      - "9001:9001"
    expose:
      - "8000"
    depends_on:
      - db
    extra_hosts:
      - "yangoo.network:10.68.0.1"
    container_name: su01
    environment:
      - DISPLAY
      - UID
      - QT_X11_NO-MITSHM=1
    ipc: host
© www.soinside.com 2019 - 2024. All rights reserved.