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

Podman运行SQL Server 2019容器报error101可否自定义运行用户

问题说明

非root用户使用Podman启动SQL Server 2019容器时触发报错:

/opt/mssql/bin/sqlservr: Unable to start the process, with error 101.

初步判断问题和容器默认使用宿主机不存在的mssql用户运行有关,目标是修改容器运行身份,使用当前登录的、具备特定权限的工作账户运行容器。测试多组命令参数组合后未找到有效配置项。

带卷挂载、端口映射的完整运行命令及输出日志:

[{username}@{server} ~]$ podman run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=A_Str0ng_Required_Password" -v /apps/home/{username}/var/mssql/data:/var/mssql/data:Z -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest
SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
/opt/mssql/bin/sqlservr: Unable to start the process, with error 101.

补充验证:移除卷挂载、端口映射参数,使用最简命令运行仍然触发相同报错:

[{username}@{server} ~]$ podman run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=A_Str0ng_Required_Password" mcr.microsoft.com/mssql/server:2019-latest
SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
/opt/mssql/bin/sqlservr: Unable to start the process, with error 101.
解决方法

报错101的核心原因是rootless Podman的用户命名空间映射规则,和容器内置mssql用户的权限校验不匹配,不需要额外修改镜像,通过启动参数即可解决,提供两种可落地的方案:

方案1:使用容器内置mssql用户运行(兼容性最高,推荐)

SQL Server 2019官方镜像内的mssql用户固定UID/GID为10001,直接通过--user参数指定数字形式的UID/GID启动即可,不需要修改容器内部结构:

  • 如果使用数据卷挂载,先在宿主机给挂载目录设置对应属主权限:
    chown -R 10001:10001 /apps/home/{username}/var/mssql/data
    
  • 启动命令添加--user 10001:10001参数,示例:
    podman run --user 10001:10001 \
    -e "ACCEPT_EULA=Y" \
    -e "SA_PASSWORD=A_Str0ng_Required_Password" \
    -v /apps/home/{username}/var/mssql/data:/var/mssql/data:Z \
    -p 1433:1433 \
    mcr.microsoft.com/mssql/server:2019-latest
    

方案2:使用当前宿主机工作账户运行

如果必须使用当前登录的宿主机用户身份运行,需要传入当前用户的数字UID/GID(不要直接传用户名,Podman不会自动在容器内创建同名用户),同时在启动时修正容器内mssql相关目录的权限:

  1. 先查询当前用户的UID和GID:
    id -u # 输出当前用户UID,示例输出1000
    id -g # 输出当前用户GID,示例输出1000
    
  2. 执行带权限修正的启动命令:
    podman run --user $(id -u):$(id -g) \
    -e "ACCEPT_EULA=Y" \
    -e "SA_PASSWORD=A_Str0ng_Required_Password" \
    -v /apps/home/{username}/var/mssql/data:/var/mssql/data:Z \
    -p 1433:1433 \
    --entrypoint bash mcr.microsoft.com/mssql/server:2019-latest \
    -c "chown -R $(id -u):$(id -g) /var/opt/mssql && exec /opt/mssql/bin/sqlservr"
    

注意事项

  • 所有传给--user参数的身份标识必须是数字格式的UID/GID,传入用户名会因为容器内不存在对应用户触发权限错误
  • rootless Podman环境下,方案1不需要修改容器内的文件权限结构,稳定性比方案2更高,优先选用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:33:39