因此,我有一台运行VcXsrv的Windows 10计算机。我已经安装了WSL2,并且在WSL2环境中,我可以在Headful模式下运行Node.js Puppeteer应用程序而没有任何问题。
这里的问题是我现在想在WSL2而不是WSL2上运行的Docker容器中运行该应用程序。我已经设置了一个Docker容器,并且该应用程序以无头模式运行,但是我不知道如何配置Docker容器以连接到Windows主机上运行的X服务器。
连接必须从Docker到WSL2,再到Windows。
人偶抛出的错误非常笼统:

(node:92) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
Fontconfig warning: "/etc/fonts/fonts.conf", line 100: unknown element "blank"
[110:110:0729/163412.032352:ERROR:browser_main_loop.cc(1417)] Unable to open X display.


TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md

    at onClose (/var/www/html/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:193:20)
    at ChildProcess.<anonymous> (/var/www/html/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:184:79)
我在docker容器中设置了DISPLAY env变量,使其具有与WSL2环境相同的值:
workspace@d1d60e8e27a5:/var/www/html$ echo $DISPLAY
172.30.240.1:0.0
直接在WSL2中运行应用程序时,该值相同

最佳答案

它奇迹般地开始工作。基本上,如果一切都可以在WSL2中正常运行,那么您只需要将DISPLAY env var重新导出到Docker容器中就可以了。为此,您可以在docker-compose.yml文件中指定不带值的env var,该文件将使用env变量在主机(本例中为WSL2)上具有的值。

env:
 - DISPLAY
 - SOMETHING=else

09-05 02:16