SQL 服务器 Docker 容器立即退出

SQL Server Docker container immediately exiting

我正在尝试通过 Docker 在我的 mac 上 运行 一个 SQL 服务器容器。

我运行以下命令:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=strongpassword" -p 1433:1433 --name sqlservercontainer -d mcr.microsoft.com/mssql/server:2019-latest

但是容器正在立即退出。

容器的 docker 日志如下所示:

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.

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: The system directory [/.system] could not be created. File: LinuxDirectory.cpp:420 [Status: 0xC0000022 Access Denied errno = 0xD(13) Permission denied]

/opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. File: LinuxDirectory.cpp:420 [Status: 0xC0000022 Access Denied errno = 0xD(13) Permission denied]

知道需要做些什么来解决这个问题吗?

如果您使用 sudo 命令在您的主目录结构之外创建一个文件夹供 Docker 使用,那么该文件夹将归 root 用户所有,例如:

$ sudo mkdir /var/mssql-data

$ ls -la /var/mssql-data
total 0
drwxr-xr-x   2 root  wheel    64B 26 May 11:31 ./
drwxr-xr-x  30 root  wheel   960B 26 May 11:31 ../

当您尝试使用该文件夹的卷映射启动 SQL 服务器容器时,容器将无法启动 - 因为 Docker 后端进程没有访问权限 - 而您将看到“无法创建系统目录”错误消息,例如:

$ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=StrongPassw0rd" -p 1433:1433 -v /var/mssql-data:/var/opt/mssql --name sqlservercontainer -d mcr.microsoft.com/mssql/server:2019-latest
9d6bf76a91af08329ea07fafb67ae68410d5320d9af9db3b1bcc8387821916da

$ docker logs 9d6bf76a91af08329ea07fafb67ae68410d5320d9af9db3b1bcc8387821916da
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: The system directory [/.system] could not be created. File: LinuxDirectory.cpp:420 [Status: 0xC0000022 Access Denied errno = 0xD(13) Permission denied]

要纠正这种情况,您需要授予您自己的帐户访问该文件夹的权限,然后使用该卷映射的容器将成功启动:

$ sudo chown $USER /var/mssql-data

$ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=StrongPassw0rd" -p 1433:1433 -v /var/mssql-data:/var/opt/mssql --name sqlservercontainer -d mcr.microsoft.com/mssql/server:2019-latest
3b6634f234024e07af253e69f23971ab3303b3cb6b7bc286463e196dae4de82e