不久前,我在我的 debian VPS 上安装了 mssql-server 并且工作正常。现在,mssql-server 没有运行,我不知道发生了什么变化。
如果输入/opt/mssql/bin/sqlserver
我得到
2019-07-07 18:13:19.79 Logon Error: 18456, Severity: 14, State: 7.
2019-07-07 18:13:19.79 Logon Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 127.0.0.1]
如果我开始服务sudo systemctl start mssql-server
我会得到
jul 07 18:27:23 vps495056 systemd[1]: Started Microsoft SQL Server Database Engine.
-- Subject: Unit mssql-server.service has finished start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit mssql-server.service has finished starting up.
--
-- The start-up result is done.
jul 07 18:27:23 vps495056 sqlservr[28229]: /opt/mssql/bin/sqlservr Error: Directory [/var/opt/system/] could not be created. Errno [13]
jul 07 18:27:23 vps495056 systemd[1]: mssql-server.service: Main process exited, code=exited, status=1/FAILURE
我创建了var/opt/system
目录,因为它不存在。
drwxr-sr-x 2 mssql mssql 4096 jul 5 18:46 system
mssql配置文件
# cat /var/opt/mssql/mssql.conf
[EULA]
accepteula = Y
[language]
lcid = 1033
我尝试重新安装 mssql-server 但没有成功。之后我得到同样的错误。
答案1
一年前,mssql 从 root 用户映像转变为非 root 用户。它使得具有绑定卷并在 Linux 主机上运行的 docker sql-server 容器出现权限问题(=> 无权写入绑定卷)。
这个问题的解决方案很少:
1. 以 root 身份运行 docker。
例如。撰写:
version: '3.6'
services:
mssql:
image: mcr.microsoft.com/mssql/server:2019-latest
user: root
ports:
- 1433:1433
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=BLAH
volumes:
- ./data:/var/opt/mssql/data
来源:https://github.com/microsoft/mssql-docker/issues/13#issuecomment-641904197
2. 设置正确的目录所有者 (mssql)
- 检查 docker 镜像上 mssql 用户的 ID
sudo docker run -it mcr.microsoft.com/mssql/server id mssql
给出:uid=10001(mssql) gid=0(root) groups=0(root)
- 更改文件夹的所有者
sudo chown 10001 VOLUME_DIRECTORY
西班牙语来源:https://www.eiximenis.dev/posts/2020-06-26-sql-server-docker-no-se-ejecuta-en-root/
3.完全访问(不推荐)
授予对主机上的数据库文件的完全访问权限
sudo chmod 777 -R VOLUME_DIRECTORY