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

M1芯片Mac下Docker安装Google Chrome报错及Selenium部署方法

报错核心原因
  • 源配置中硬编码了[arch=amd64],M1芯片Mac的Docker默认运行arm64架构镜像,apt只会检索当前架构的软件包,无法找到amd64架构的chrome安装包
  • 旧版apt-key add添加密钥的方式已经在新版Debian/Ubuntu中被废弃,容易触发密钥校验类错误
  • 没有提前安装Chrome运行依赖的系统库,就算找到安装包也会出现依赖缺失的安装失败问题
适配M1(arm64)的Chrome安装方案

优先使用原生arm64架构的Chrome,性能远高于QEMU模拟的amd64版本,Dockerfile配置片段如下:

# 先安装Chrome运行所需的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget gnupg2 ca-certificates fonts-liberation \
    libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 \
    libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 \
    libgtk-3-0 libnspr4 libnss3 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 lsb-release xdg-utils \
    && rm -rf /var/lib/apt/lists/*

# 自动适配架构添加Chrome官方源
RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /usr/share/keyrings/google-chrome-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list

# 安装Chrome稳定版
RUN apt-get update && apt-get install -y google-chrome-stable \
    && rm -rf /var/lib/apt/lists/*

如果必须使用amd64版本Chrome,构建镜像时添加--platform linux/amd64参数即可,例如docker build --platform linux/amd64 -t selenium-chrome .,该方案依赖QEMU转译,运行性能较差,非必要不使用。

Docker中运行Selenium的完整配置

以下是基于Python环境的可直接运行的Dockerfile示例,Selenium 4.6+版本内置了Selenium Manager,会自动匹配Chrome版本下载对应ChromeDriver,无需手动安装配置:

# 自动适配构建主机架构,M1下默认使用arm64镜像
FROM --platform=$BUILDPLATFORM python:3.11-slim-bookworm

WORKDIR /app

# 安装Chrome及依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget gnupg2 ca-certificates fonts-liberation \
    libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 \
    libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 \
    libgtk-3-0 libnspr4 libnss3 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 lsb-release xdg-utils \
    && rm -rf /var/lib/apt/lists/*

RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /usr/share/keyrings/google-chrome-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get install -y google-chrome-stable \
    && rm -rf /var/lib/apt/lists/*

# 安装Selenium
RUN pip install --no-cache-dir selenium

# 复制本地项目代码到容器
COPY . .

# 替换为你实际的启动命令
CMD ["python", "main.py"]

Selenium脚本中需要添加容器环境必需的Chrome启动参数,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

opts = Options()
# 无头模式,无GUI环境必需
opts.add_argument("--headless=new")
# 关闭沙箱,容器环境运行必需
opts.add_argument("--no-sandbox")
# 禁用/dev/shm共享内存,避免容器内存不足报错
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--disable-gpu")
opts.add_argument("--window-size=1920,1080")

driver = webdriver.Chrome(options=opts)
driver.get("https://example.com")
print(driver.title)
driver.quit()
注意事项
  • 不要硬编码软件源的CPU架构,通过$(dpkg --print-architecture)自动获取,可同时兼容arm64、amd64架构
  • 安装完成后及时清理/var/lib/apt/lists/*缓存,可以有效减小镜像体积
  • 如果使用其他语言的Selenium绑定(Java/Node.js/Go等),Chrome安装部分的配置完全通用,只需要替换对应语言的基础镜像和依赖安装命令即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:01:20