使用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(多因权限不足导致文件读写异常)。
分步解决方案
修正宿主机挂载目录权限
给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配置中实际挂载的本地目录。
调整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,仅临时调试时可使用(用完立即移除)。排查
Bus error诱因- 避免挂载NFS等远程文件系统,SQL Server容器对远程存储兼容性有限,优先使用本地磁盘目录。
- 检查宿主机磁盘状态:执行
df -h确认磁盘空间充足,smartctl排查磁盘坏道。 - 升级docker与docker-compose到最新稳定版,旧版本可能存在容器权限管理bug。
清理残留缓存与容器
移除旧容器、卷与缓存后重新部署:docker-compose down -v docker system prune -f docker-compose up -d
为什么手动CMD部署正常?
手动CMD运行时,若未挂载本地卷,容器使用内部存储(权限由镜像自动配置);若挂载了目录,可能当时目录权限恰好匹配mssql用户,而docker-compose部署时未提前设置权限,导致权限冲突触发错误。
内容的提问来源于stack exchange,提问作者suhail-imfs
相关产品推荐
相关产品推荐

