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

M1 Mac Docker中运行Azure SQL Edge失败,退出码1求助

解决M1 Mac Docker中Azure SQL Edge启动失败(退出码1)的问题

问题原因

你遇到的地址映射错误,是因为Azure SQL Edge的x86镜像在M1 Mac的Docker Rosetta模拟环境下,以非root用户运行时会触发虚拟内存布局冲突。默认容器以mssql用户启动,这在Arm架构的Rosetta模拟场景中会引发内存地址映射的兼容性问题。

解决方案

1. 强制容器以root用户运行

修改docker-compose.yml,添加user: root参数,绕过非root用户的内存限制:

version: "3.1"
services:
  mssql:
    image: mcr.microsoft.com/azure-sql-edge:1.0.6
    container_name: mssql
    user: root  # 添加该行,强制以root身份启动
    volumes:
      - events_mssql:/var/opt/mssql
      - ./setup.sql:/usr/config/setup.sql
    ports:
      - 1433:1433
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=Passw@rd
      - MSSQL_PID=Developer

volumes:
  events_mssql:

注意:你之前定义的MSSQL_DB、MSSQL_USER等属于自定义环境变量,Azure SQL Edge官方并不支持自动替换setup.sql中的占位符,后续需通过自定义入口脚本手动处理变量替换逻辑。

2. 清理旧容器与卷(可选)

若之前的容器或卷存在损坏状态,执行以下命令清理后重新启动:

docker-compose down -v
docker-compose up -d

3. 确认Docker Rosetta模拟设置(Docker Desktop 4.13+)

确保Docker Desktop已启用x86/amd64模拟:

  • 打开Docker Desktop设置 → Features in development → 勾选"Use Rosetta for x86/amd64 emulation on Apple Silicon"
  • 重启Docker Desktop

额外说明

Azure SQL Edge目前无官方Arm架构镜像,只能通过Rosetta模拟x86镜像运行。以root用户运行是当前解决该内存映射错误最直接的方案,虽安全性略有降低,但在开发环境中完全可接受。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:40:25