SQL Server 2019 Linux Docker 在主机上以其他非根用户的身份运行容器

时间:2023-03-09 18:35:41
SQL Server 2019 Linux Docker 在主机上以其他非根用户的身份运行容器

docker logs mssql2019
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: Error: Directory [/var/opt/mssql/system/] could not be created. Errno [13]

以根用户的身份运行非根容器

如果需要,以根用户的身份运行非根容器。 这还会将所有文件权限自动授予容器,因为容器具有更高的特权。

bash复制
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

在主机计算机上以用户的身份运行

可使用以下命令在主机计算机上以现有用户身份启动 SQL Server:

bash复制
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

以其他用户和组的身份运行

可使用自定义用户和组启动 SQL Server。 在此示例中,已装载的卷具有为主机计算机上的用户或组配置的权限。

bash复制
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u (id -u myusername):(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

为非根容器配置持久存储权限

若要允许非根用户访问已装载的卷上的 DB 文件,请确保运行容器所用的用户/组可以接触持久文件存储。

可通过此命令获取数据库文件的当前所有权。

bash复制
ls -ll <database file dir>

如果 SQL Server 无权访问持久数据库文件,请运行以下命令之一。

授予对 DB 文件的根组读/写访问权限

授予对以下目录的根组权限,使非根 SQL Server 容器有权访问数据库文件。

bash复制
chgroup -R 0 <database file dir>
chmod -R g=u <database file dir>

将非根用户设置为文件的所有者。

这可以是默认的非根用户,也可以是要指定的任何其他非根用户。 在此示例中,我们将 UID 10001 设置为非根用户。

bash复制
chown -R 10001:0 <database file dir>