簡體   English   中英

Docker X11 Forward 得到黑屏

[英]Docker X11 Forward get Blank Screen

我試圖使用 docker 來包含我的應用程序並轉發 x11 以使用 chromedriver 生成 Chrome。 我可以讓瀏覽器生成,但它生成的都是空白的。 上下文菜單也是空白的。 它關閉而不會崩潰。

介紹信息:(可以跳過)

我有一個應用程序(django+postgresql+supervisor+uwsgi+celery+redis+nginx+selenium)通過 Chromedriver 和 Selenium 生成 Chrome/Chromium 瀏覽器,在不同的預加載用戶數據目錄中打開它們(預加載會話和登錄) ) 並在不同的站點中執行一些自動化操作。

在我的電腦中,一切都運行流暢清晰。

一些同事要求我為他們安裝我的應用程序。 我告訴他們它只能在 Linux 上運行,因為我是在 Linux 上開發的,我不確定在 Windows 中是否一切都一樣。

在其中 1 個安裝 Ubuntu 之后,我嘗試使用我的源代碼安裝所有內容,使用我的私人 git 存儲庫進行共享/更新,這非常痛苦。

首先,我在安裝正確的 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 可以從其存儲庫(chromium 版本 73)安裝 Chromium 和 chromedriver * 這是我最簡單的設置我找到了滿足我的需求


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

這是我的 docker compose 文件:


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 發行版的虛擬機中工作。 該問題似乎僅存在於較舊的發行版中。

有一個 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM