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

使用docker-compose.yaml部署SQL Server容器时出现Bus error求助

解决SQL Server 2022容器docker-compose部署后持续重启的权限问题

问题根源

SQL Server 2022官方镜像默认以非root用户mssql(UID 10001)运行,当docker-compose挂载本地目录时,若目录权限未匹配该用户,会导致脚本执行失败(nt.sh': Operation not permitted、chmod失败),进而触发容器崩溃重启,伴随Bus error(多因权限不足导致文件读写异常)。

分步解决方案

  1. 修正宿主机挂载目录权限
    给SQL Server容器使用的挂载目录赋予mssql用户读写权限:

    sudo chown -R 10001:0 /path/to/your/sql/data
    sudo chown -R 10001:0 /path/to/your/sql/log
    sudo chmod -R 755 /path/to/your/sql/data
    sudo chmod -R 755 /path/to/your/sql/log
    

    替换路径为你docker-compose配置中实际挂载的本地目录。

  2. 调整docker-compose配置
    确保配置中未强制使用root用户,同时正确设置环境变量与卷挂载:

    version: '3.8'
    services:
      sqlserver:
        image: mcr.microsoft.com/mssql/server:2022-latest
        container_name: sqlserver2022
        environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=YourStrongPass123!  # 需符合复杂度要求:至少8位,含大小写、数字、特殊字符
        volumes:
          - ./sql_data:/var/opt/mssql/data
          - ./sql_log:/var/opt/mssql/log
          - ./sql_secrets:/var/opt/mssql/secrets
        ports:
          - "1433:1433"
        restart: unless-stopped
    

    注意:生产环境禁止添加user: root,仅临时调试时可使用(用完立即移除)。

  3. 排查Bus error诱因

    • 避免挂载NFS等远程文件系统,SQL Server容器对远程存储兼容性有限,优先使用本地磁盘目录。
    • 检查宿主机磁盘状态:执行df -h确认磁盘空间充足,smartctl排查磁盘坏道。
    • 升级docker与docker-compose到最新稳定版,旧版本可能存在容器权限管理bug。
  4. 清理残留缓存与容器
    移除旧容器、卷与缓存后重新部署:

    docker-compose down -v
    docker system prune -f
    docker-compose up -d
    

为什么手动CMD部署正常?

手动CMD运行时,若未挂载本地卷,容器使用内部存储(权限由镜像自动配置);若挂载了目录,可能当时目录权限恰好匹配mssql用户,而docker-compose部署时未提前设置权限,导致权限冲突触发错误。

内容的提问来源于stack exchange,提问作者suhail-imfs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:40