gpt4 book ai didi

python - Docker X11 Forward 得到黑屏

转载 作者:行者123 更新时间:2023-12-02 19:03:05 27 4
gpt4 key购买 nike

我试图使用 docker 来包含我的应用程序并转发 x11 以使用 chromedriver 生成 Chrome。
我可以让浏览器产生,但它的产生都是空白的。上下文菜单也是空白的。它关闭而不会崩溃。

介绍信息:(可跳过)

我有一个应用程序(django+postgresql+supervisor+uwsgi+celery+redis+nginx+selenium)通过带有 Selenium 的 Chromedriver 生成 Chrome/Chromium 浏览器,在不同的预加载用户数据目录中打开它们(预加载 session 和登录) 并在不同的站点做一些自动化的事情。

在我的电脑上,一切都顺畅而清晰。

一些同事要求我为他们安装我的应用程序。我告诉他们它只能在 Linux 上运行,因为我在 Linux 中开发,我不确定在 Windows 中是否一切都一样。

在其中 1 个安装 Ubuntu 后,我尝试使用我的源代码安装所有内容,使用我的私有(private) git 存储库进行共享/更新,这非常痛苦。

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

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

因此,经过大量阅读,我认为 Docker 非常适合,即使它不是为打开桌面应用程序而设计的。一个 X11 前锋可以解决这个问题。

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

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

我跑了xhost +local:root在我的主机上,但这不会解决问题。

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

```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 和 chromedriver(chromium 版本 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

这是我的 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

关于python - Docker X11 Forward 得到黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com