当前位置: 首页 > 知识库问答 >
问题:

当docker主机为windows时,在docker容器中头朝下运行puppeter

燕野
2023-03-14

我已经对两项服务进行了任务整理:

    < li>web前端(包含在端口3000上访问的angular中的GUI) < li >后端(具有从端口8111上访问的网页中提取数据的puppeteer依赖性)

以下是后端的简化版本dockerfile:

FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...

USER root:root

COPY ./backend /node/backend

WORKDIR /node/backend
RUN npm install --unsafe

CMD npm start

EXPOSE 8011

它们用sock.io相互通信。

后端有两种运行提取的模式(headless和headful)。无头提取成功地与这些dockerized服务一起工作。

在本地运行后端时,令人头痛的提取会弹出包含正在处理的页面的web浏览器。当在dockerized后端上启用headful提取时,由于容器没有GUI,它会失败。

为了修复后端上的头部提取,我修改了下面的docker文件:

FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...

# Adding dependecies that are needed to create fake display in container
RUN apt-get update &&\
apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++++++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget \
xvfb x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps

USER root:root

COPY ./backend /node/backend

WORKDIR /node/backend
RUN npm install --unsafe

# Creating display
ENV DISPLAY :99

# CMD npm start
CMD Xvfb :99 -screen 0 1024x768x16 & npm start

EXPOSE 8011

我正在运行两个容器,没有网络隔离,如下所示:

docker run --network host web
docker run --network host --env="DISPLAY" backend 

在这些更改之后,头部提取成功,但浏览器窗口不会弹出。

    < li >为什么浏览器窗口没有弹出? < li >这应该也能够适用于无法移除网络隔离的Windows主机。是否有可能在不移除网络隔离的情况下实现浏览器从容器到主机的弹出?

你好,兰多。

附言

我试图实现运行网络浏览器的图形用户界面,它是在主机的容器内启动的,主机是Windows。我需要知道,如果容器是Linux,主机是Windows,并且网络隔离(< code>net=host)的移除是不可能的,是否有可能实现这一点。

共有1个答案

杨利
2023-03-14
    < li >浏览器窗口没有弹出,因为xvfb是虚拟帧缓冲区。也就是说,它模拟容器内部的屏幕。如果您想看到容器内部的浏览器窗口,您可以使用< code>x11vnc,这将允许您看到容器显示内部的情况。这个问题对如何实现这一点有很好的答案。

关于如何将vnc转换为运行xvfb的docker容器的分步指南。

 类似资料:
  • 正如文档中所说,如果我想在docker中运行测试容器,我必须考虑以下几点: null

  • TL;DR:我可以配置一个容器来访问本机VGA,覆盖主机视频输出吗? 我正在考虑处理我的低功耗XenServer(以前是ESXi)白箱来设置一个docker最小安装(例如CoreOS、RancherOs或类似的发行版)。是否可以给一个(可能不是特权)容器对视频输出的独占访问/通过,安装一个可以与所有其他容器一起运行的媒体中心解决方案(例如Kodi),将全屏视频输出到电视,“显然”带有硬件加速视频解

  • 问题内容: Docker容器可以通过哪个IP地址连接到Windows版Docker(在Windows 10上)上的主机?您如何找到此IP地址? 例如:您有一个服务在Windows 10计算机上的端口1234上运行。容器中的程序必须访问此服务。程序应使用哪个IP地址连接到主机? 问题答案: 简短的回答 :在大多数情况下,您需要 10.0.75.1 。 在适用于Windows的Docker中,容器通过

  • 我遵循的https://app.pluralsight.com/library/courses/docker-web-development/table-of-contents使用旧的微软/aspnetcore-构建镜像,但我运行核心2.1,所以我使用微软/dotnet: 2.1-sdk代替。 我正在运行的命令是: docker run-it-p8080:5001-v${pwd}:/app-w“/

  • 问题内容: 我看到很多人都在为此苦苦挣扎,好像在redis容器映像中可能有一个错误,而其他人似乎在追寻类似的问题。 我在DockerHub上使用标准Redis映像。(https://github.com/dockerfile/redis) 像这样运行它: 进入服务器后,就可以启动服务器,并从容器映像进行Redis ping了。 不幸的是,我无法从主机连接到Redis容器。 我已经尝试设置,例如下面

  • 我在用“docker外面的docker”和jenkins运行一个容器。我的docker是: 所以所有从“jenkins容器”启动的容器都在主机中运行。 但是,当我试图在需要卷的作业中运行“jenkins容器”中的docker compose时,它采用的是来自主机的路径,而不是jenkins的路径。我是说,当我和docker合作时 它安装在主机的/var/jenkins_home/workspace