【问题标题】:Docker container running SQL Server exits on start运行 SQL Server 的 Docker 容器在启动时退出
【发布时间】:2022-12-22 21:58:45
【问题描述】:

我在 Docker 容器中运行 SQL Server 实例。它在启动时自动退出。日志说:

SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
Your master database file is owned by mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
sqlservr: Unable to read instance id from /var/opt/mssql/.system/instance_id: File: pal.cpp:438 [Status: 0xC0000034 Object name not found errno = 0x2(2) No such file or directory]
/opt/mssql/bin/sqlservr: PAL initialization failed. Error: 101

如果我没看错,SQL Server 将不会以 root 用户运行。但是我的容器和卷都以同一个非根用户身份运行。所以我很困惑问题出在哪里。有人可以帮我解码此错误消息吗?

【问题讨论】:

  • 我需要的信息很少,缺少 docker 文件,缺少 docker run 命令。查看这个 repo,其中包含很多在 docker 中运行 sql server 的示例:github.com/enriquecatala/mssql-server-samplesdb
  • 在用于 Docker 的 SQL Server 的先前版本中,SQL Server 进程确实以 root 运行,但从大约 2019 年开始,它们现在遵守最小权限原则并以特定的 mssql 用户运行。鉴于“没有这样的文件或目录”错误消息,您最近是否更改了容器上的 Docker 卷/挂载?

标签: sql-server docker


【解决方案1】:

此错误可能是由于以错误的方式绑定 sql server 卷/var/opt/mssql 引起的。

例如。

docker run `
    --name sqlexpress `
    -e ACCEPT_EULA=Y `
    -e MSSQL_SA_PASSWORD="averyuRandomPass0wrd" `
    -p 1433:1433 `
    -v "/var/lib/docker/mssql:/var/opt/mssql" `
    -e MSSQL_PID="Express" `
    -d mcr.microsoft.com/mssql/server:latest

相反,确保映射 /var/opt/mssql 的子卷

docker run `
    --name sqlexpress `
    -e ACCEPT_EULA=Y `
    -e MSSQL_SA_PASSWORD="averyuRandomPass0wrd" `
    -p 1433:1433 `
    -v "/var/lib/docker/mssql/data:/var/opt/mssql/data" `
    -v "/var/lib/docker/mssql/log:/var/opt/mssql/log" `
    -e MSSQL_PID="Express" `
    -d mcr.microsoft.com/mssql/server:latest

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多