当前位置: 首页 > 面试题库 >

使用来自另一个容器的容器化chrome二进制文件运行人偶

莫承运
2023-03-14
问题内容

我希望我的代码使用在一个容器中运行的puppeteer并使用(也许通过“executablePath”启动参数?)另一个容器中的chrome二进制文件。这可能吗?任何已知的解决方案

用例:

辅助代码在多个k8容器(作为容器)中运行。“有时”(可能经常或不经常)工作人员需要使用操纵up来运行代码。我不想让docker庞大而受限,因为puppeteer/ chrome容器是(1.5 GB,如果我没记错的话),我只是想从另一个运行中的容器中提供所需的二进制代码给我的代码

注意:这不是关于将人偶装箱的问题,我知道这是可能的


问题答案:

除了这里和这里的答案之外,这是您如何执行此操作的方法。基本上,这个想法是在其他docker上运行chrome并从另一个docker连接到docker,然后在需要时使用它。它将需要一些维护,错误处理,超时和并发,但这不是这里的问题。

您将puppeteer保存在主帐户上PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true,使用来安装puppeteer时不安装chrome,而是使用它连接到在另一个docker上运行的辅助puppeteer。

const browser = await puppeteer.connect({
    browserWSEndpoint: "ws://123.123.123.123:8080",
    ignoreHTTPSErrors: true
});

websocket

您在此处设置了完全运行的Chrome,公开了websocket。有不同的方法可以做到这一点。这是最简单的一个。

const http = require('http');
const httpProxy = require('http-proxy');

const proxy = new httpProxy.createProxyServer();

http
  .createServer()
  .on('upgrade', async(req, socket, head) => {
      const browser = await puppeteer.launch();
      const target = browser.wsEndpoint();

      proxyy.ws(req, socket, head, { target })
  })
  .listen(8080);


 类似资料:
  • 我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中- “finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172

  • 问题内容: 我有两个Docker映像,一个包含(一个实用程序,用于将不同格式的文档转换为多种格式),另一个包含(从,将文件转换成)。我的目标是将文档从转换为。 我可以分别运行每个图像: 但是,实际上,我想要的是直接调用(从其容器中)将其转换为,如下所示: 该命令在这里不起作用,因为容器内部会尝试调用(必须在)以生成pdf,但由于未安装在pdf中,因此该命令不存在。 就我而言,已安装在映像中。 因此

  • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

  • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为

  • 我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne

  • PS:如果您想要Postgresql容器中的日志: