Dockerfile使用最新SQL Server镜像创建文件夹遇权限问题及相关咨询
问题背景
我的Dockerfile内容如下:
FROM mcr.microsoft.com/mssql/server:latest RUN mkdir -p /new-folder
自2023年7月13日该镜像发布最新版本后,执行构建时遇到如下错误:
mkdir: cannot create directory '/new-folder': Permission denied
切换至旧版本镜像(mcr.microsoft.com/mssql/server:2022-CU5-ubuntu-20.04)则可正常运行。
问题
- 如何修改Dockerfile以在最新镜像中实现文件夹创建?
- 是否可以查看该SQL Server镜像的Dockerfile,以理解此破坏性变更?
解答
1. 修改Dockerfile实现文件夹创建
最新版本的SQL Server镜像默认以非root用户(mssql)运行,根目录/的写入权限仅对root用户开放,因此直接执行mkdir会触发权限报错。可通过以下两种方式修改:
方式一:临时切换root用户执行创建
FROM mcr.microsoft.com/mssql/server:latest USER root RUN mkdir -p /new-folder # 可选:将文件夹权限赋予mssql用户,确保后续服务可正常访问 RUN chown mssql:mssql /new-folder USER mssql
方式二:在mssql用户有权限的目录下创建
如果无需在根目录创建,可选择镜像中mssql用户默认拥有写入权限的目录(如/var/opt/mssql):
FROM mcr.microsoft.com/mssql/server:latest RUN mkdir -p /var/opt/mssql/new-folder
2. 查看镜像Dockerfile及理解变更
微软并未公开SQL Server官方镜像的完整Dockerfile,但可通过以下方式分析变更原因:
- 执行
docker inspect mcr.microsoft.com/mssql/server:latest命令,查看镜像的默认用户、环境变量等配置,对比旧版本镜像的输出,能发现新版本默认用户从root改为了mssql。 - 查阅微软官方发布的SQL Server容器镜像变更日志,其中会明确记录权限模型调整这类破坏性变更。
- 微软容器技术文档中会说明镜像的安全优化方向,这类权限收紧属于常规的容器安全加固操作。
内容的提问来源于stack exchange,提问作者Tao Gómez Gil
相关产品推荐
相关产品推荐

