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

如何在Docker Compose/K8s中部署MageAI并解决Selenium启动失败问题

可行部署方案

Docker Compose 方案

思路

将MageAI与Selenium Chrome服务拆分为两个独立容器,通过内部网络互通:MageAI容器仅负责ETL逻辑执行,Selenium容器单独提供浏览器运行环境,彻底规避在Mage容器内安装浏览器及驱动引发的依赖冲突问题。

具体配置

  1. 创建docker-compose.yml文件:
version: '3.8'
services:
  mage:
    image: mageai/mageai:latest
    command: mage start my_project
    ports:
      - "6789:6789"
    volumes:
      - ./my_project:/home/src/my_project
    environment:
      - SELENIUM_REMOTE_URL=http://selenium-chrome:4444/wd/hub
    depends_on:
      - selenium-chrome

  selenium-chrome:
    image: selenium/standalone-chrome:latest
    ports:
      - "4444:4444"
      - "7900:7900" # VNC端口,用于调试浏览器运行状态
    shm_size: '2g' # 解决Chrome内存不足导致的崩溃问题
  1. 修改MageAI中的Selenium代码:
    放弃本地启动ChromeDriver,改为连接远程Selenium服务:
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

# 读取环境变量中的远程服务地址
driver = webdriver.Remote(
    command_executor=os.getenv("SELENIUM_REMOTE_URL"),
    options=chrome_options
)

# 后续爬取逻辑保持不变
driver.get("https://target-website.com")
# ... 执行元素定位、数据提取等操作
driver.quit()
  1. 启动服务:
docker-compose up -d

Kubernetes 方案

思路

延续服务分离模式,通过Kubernetes的Service实现服务发现,确保MagePod能稳定访问Selenium Chrome服务,同时利用K8s的自愈能力提升整体架构稳定性。

具体配置

  1. Selenium Chrome Deployment 与 Service:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selenium-chrome
spec:
  replicas: 1
  selector:
    matchLabels:
      app: selenium-chrome
  template:
    metadata:
      labels:
        app: selenium-chrome
    spec:
      containers:
      - name: selenium-chrome
        image: selenium/standalone-chrome:latest
        resources:
          requests:
            memory: "2Gi"
            cpu: "1"
          limits:
            memory: "2Gi"
            cpu: "1"
        ports:
        - containerPort: 4444
        volumeMounts:
        - mountPath: /dev/shm
          name: dshm
      volumes:
      - name: dshm
        emptyDir:
          medium: Memory
---
apiVersion: v1
kind: Service
metadata:
  name: selenium-chrome-service
spec:
  selector:
    app: selenium-chrome
  ports:
  - protocol: TCP
    port: 4444
    targetPort: 4444
  1. MageAI Deployment(配置环境变量指向Selenium服务):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mageai
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mageai
  template:
    metadata:
      labels:
        app: mageai
    spec:
      containers:
      - name: mageai
        image: mageai/mageai:latest
        command: ["mage", "start", "my_project"]
        ports:
        - containerPort: 6789
        env:
        - name: SELENIUM_REMOTE_URL
          value: "http://selenium-chrome-service:4444/wd/hub"
        volumeMounts:
        - name: mage-project
          mountPath: /home/src/my_project
      volumes:
      - name: mage-project
        persistentVolumeClaim:
          claimName: mage-project-pvc
  1. 调整MageAI中的Selenium代码(与Docker Compose方案一致,使用远程连接)。

关键注意事项

  • 两种部署方式都需为Selenium容器分配至少2G内存,并配置/dev/shm内存挂载,避免Chrome因内存不足崩溃。
  • 远程连接时,Docker Compose通过服务名直接访问,Kubernetes通过Service名称访问,确保网络可达。
  • 调试时可通过Selenium容器的7900端口(VNC)连接,默认密码为secret,查看浏览器实时运行状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:15