You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中Playwright的Chromium远程调试端口9222无法访问

问题描述

我有一个启动Chromium Playwright浏览器实例的脚本,本地运行时添加--remote-debugging-port=9222参数能正常工作,访问http://127.0.0.1:9222/json/version可返回浏览器实例的JSON格式信息。但在运行Playwright服务的Docker容器中执行相同脚本(已通过-p 9222:9222做端口映射),访问http://127.0.0.1:9222/json/version或http://localhost:9222/json/version却没有响应。

相关文件如下:

script.js

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    headless: true,
    args: [
      '--remote-debugging-port=9222',
      '--remote-debugging-address=0.0.0.0',
      '--no-sandbox',
      '--disable-gpu',
      '--disable-software-rasterizer',
      '--disable-dev-shm-usage',
      '--disable-background-networking'
    ]
  });

  // 可选:打开一个页面
  const page = await browser.newPage();
  await page.goto('https://google.com');  // 示例,可访问任意页面
})();

Dockerfile

# 使用Playwright基础镜像
FROM mcr.microsoft.com/playwright:v1.50.0-noble

# 将script.js复制到容器中
COPY script.js .

RUN npm install playwright@1.50.0

# 容器启动时运行script.js的命令
CMD ["sh", "-c", "npx -y playwright@1.50.0 run-server --port 3000 --host 0.0.0.0 & node script.js"]

package.json

{
  "dependencies": {
    "playwright": "^1.50.0"
  },
  "scripts": {
    "start": "node script.js"
  }
}

构建镜像并运行容器的命令:docker run -p 3000:3000 -p 9222:9222

解决建议

  • 移除--disable-background-networking参数
    这个参数会禁用浏览器的后台网络通信,直接阻断了远程调试接口的服务能力。删掉它之后,调试端口才能正常对外响应请求。

  • 检查容器内端口监听状态
    进入容器执行netstat -tulpn | grep 9222,确认Chromium是否在监听0.0.0.0:9222。如果显示监听127.0.0.1,说明--remote-debugging-address=0.0.0.0参数未生效,需要排查启动命令是否正确传递了参数。

  • 调整Docker CMD的进程顺序
    当前CMD把playwright run-server后台运行后启动node脚本,可能存在脚本执行异常导致Chromium未正常启动的情况。可以调整顺序,先启动node脚本再运行server:

    CMD ["sh", "-c", "node script.js & npx -y playwright@1.50.0 run-server --port 3000 --host 0.0.0.0"]
    

    或者使用wait命令确保进程稳定运行,避免容器意外退出。

  • 验证容器内的调试端口可用性
    进入容器执行curl http://127.0.0.1:9222/json/version,如果容器内都无法访问,说明Chromium启动参数存在问题;如果容器内能访问但外部不行,检查主机防火墙是否拦截了9222端口,或者端口映射是否正确配置。

  • 移除重复的Playwright安装命令
    基础镜像mcr.microsoft.com/playwright:v1.50.0-noble已经预装了对应版本的Playwright,不需要再执行RUN npm install playwright@1.50.0,重复安装可能导致版本冲突,直接删除这行命令即可。

内容的提问来源于stack exchange,提问作者Oliver B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:25:57