Docker M1 Mac 上的 Puppeteer 无法打开新页面(“Target.createTarget”)

d-_*_*_-b 7 docker puppeteer apple-m1

我无法在 M1 Mac 上使用 Docker 中的 Puppeteer 启动新页面。

\n

版本

\n
Docker: version 20.10.11, build dea9396\nNode: 16.13.1\nMacOS: 12.0.1 (21A559)\nPuppeteer: 13.5.1\nM1 Chip\n
Run Code Online (Sandbox Code Playgroud)\n

错误信息

\n
ProtocolError: Protocol error (Target.createTarget): Target closed.\n    at /home/node/app/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:75:24\n    at new Promise (<anonymous>)\n    at Connection.send (/home/node/app/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:71:16)\n    at Browser._createPageInContext (/home/node/app/node_modules/puppeteer/lib/cjs/puppeteer/common/Browser.js:261:53)\n    at BrowserContext.newPage (/home/node/app/node_modules/puppeteer/lib/cjs/puppeteer/common/Browser.js:520:30)\n    at Browser.newPage (/home/node/app/node_modules/puppeteer/lib/cjs/puppeteer/common/Browser.js:254:37)\n    at /home/node/app/src/test.js:17:19\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n
Run Code Online (Sandbox Code Playgroud)\n

脚本

\n
Docker: version 20.10.11, build dea9396\nNode: 16.13.1\nMacOS: 12.0.1 (21A559)\nPuppeteer: 13.5.1\nM1 Chip\n
Run Code Online (Sandbox Code Playgroud)\n

Dockerfile(相关信息)

\n
FROM --platform=linux/amd64 node:16.13.1-slim\n\n# Server Dependencies (changed less often)\nRUN apt-get update && \\\n    apt-get -y install vim xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \\\n      libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \\\n      libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \\\n      libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \\\n      libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget\n\nRUN apt-get install -y python make g++\n\nRUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \\\n  && mkdir -p /home/pptruser/Downloads \\\n  && chown -R pptruser:pptruser /home/pptruser \\\n  && chown -R pptruser:pptruser /home/node/app\n\nUSER pptruser\n
Run Code Online (Sandbox Code Playgroud)\n
\xe2\x9d\xaf docker version\nClient:\n Cloud integration: v1.0.22\n Version:           20.10.11\n API version:       1.41\n Go version:        go1.16.10\n Git commit:        dea9396\n Built:             Thu Nov 18 00:36:09 2021\n OS/Arch:           darwin/arm64\n Context:           default\n Experimental:      true\n\nServer: Docker Engine - Community\n Engine:\n  Version:          20.10.11\n  API version:      1.41 (minimum version 1.12)\n  Go version:       go1.16.9\n  Git commit:       847da18\n  Built:            Thu Nov 18 00:34:44 2021\n  OS/Arch:          linux/arm64\n  Experimental:     false\n containerd:\n  Version:          1.4.12\n  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d\n runc:\n  Version:          1.0.2\n  GitCommit:        v1.0.2-0-g52b36a2\n docker-init:\n  Version:          0.19.0\n  GitCommit:        de40ad0\n
Run Code Online (Sandbox Code Playgroud)\n

All*_*len 0

node:16.13.1-slim 可在 linux/arm64/v8 中使用,只需修改该行

FROM --platform=linux/amd64 node:16.13.1-slim
Run Code Online (Sandbox Code Playgroud)

FROM --platform=linux/arm64/v8 node:16.13.1-slim
Run Code Online (Sandbox Code Playgroud)

来测试一下。