我使用以下命令在Windows Server 2016虚拟机上的Docker容器中启动Windows SQL Server:
docker container run --name mssql-server --detach --publish 1433:1433 --memory 2048mb --volume C:\_Data:C:\_Data --env sa_password=myPassword --env ACCEPT_EULA=Y microsoft/mssql-server-windows-developer
之后,我要使用以下命令启动SQL Agent:
docker container exec mssql-server cmd.exe /C "net start sqlserveragent"
不幸的是我得到了这个输出:
The SQL Server Agent (MSSQLSERVER) service is starting.
The SQL Server Agent (MSSQLSERVER) service could not be started.
The service did not report an error.
More help is available by typing NET HELPMSG 3534
当我输入NET HELPMSG 3534
时,我得到:
The service did not report an error.
我完全没有主意。在我的本地计算机上,这可以正常工作,但在构建服务器上却不能。
任何帮助表示赞赏。
修改:
我打开SQL Server Management Studio并注意到SQL Server Agent (Agent XPs disabled)
节点。
因此,我经历了https://www.mssqltips.com/sqlservertip/2729/how-to-start-sql-server-agent-when-agent-xps-show-disabled/中的所有内容。之后我执行了
exec sp_configure 'Agent XPs'
但是当我尝试启动代理时,我从上面得到了完全相同的错误消息(service ist startup ...服务无法启动...未报告错误)。
有趣的是,当我跑步时
exec sp_configure 'Agent XPs'
再次
start-agent-command如何禁用Agent XP?
Edit2 :我刚刚从https://community.spiceworks.com/topic/293771-sql-server-agent-agent-xps-disabled-sql-server-2008的评论中获悉,代理在启动和停止时会自动配置此值。因此,我不应该手动启用它。
Edit3: 在Jeroen Mostert发表评论后,我调查了EventLog。 我使用了以下命令:
docker container exec mssql-server powershell.exe "Get-EventLog Application -Newest 100"
这是来自应用程序日志的结果
Time EntryType Source InstanceID Message
---- --------- ------ ---------- -------
Jun 25 10:37 Information SQLSERVERAGENT 1073741926 SQLServerAgent service successfully stopped.
Jun 25 10:37 Information MSSQLSERVER 1073757281 Configuration option 'Agent XPs' changed from 1 to 0. Run the RECONFIGURE statement to install.
Jun 25 10:36 Information MSSQLSERVER 1073757281 Configuration option 'Agent XPs' changed from 0 to 1. Run the RECONFIGURE statement to install.
您可以看到,我已经手动启用了Agent XPs
。然后我从上方运行命令以启动代理,这给了我接下来的两行
System-EventLog给了我
Time EntryType Source InstanceID Message
---- --------- ------ ---------- -------
Jun 25 10:37 Information Service Control Manager 1073748860 The SQL Server Agent (MSSQLSERVER) service entered the stopped state.
编辑4:
根据Dan Guzman的评论:这是SQLAGENT.OUT
的内容:
2019-07-09 11:03:44 - ? [000]
2019-07-09 11:03:44 - ? [098] SQLServerAgent terminated (normally)
修改5:
版本是({select @@version
)是:
Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64) Dec 22 2017 16:13:22 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
答案 0 :(得分:1)
我的解决方案是将构建服务器升级到Windows Server2019。就是这样。然后,一切正常,没有任何进一步的改变。
答案 1 :(得分:0)
您好,您需要启动SQL Server代理服务,如何启动服务,您可以点击以下链接:Start Service
步骤1:首先,您必须单击开始菜单并搜索SQL Server配置管理器,然后从搜索结果中单击SQL Server配置管理器选项。>
步骤2:然后,您必须从左侧菜单中选择SQL Server服务,然后您可以看到服务SQL Server(SQLEXPRESS)未运行并且已停止。
步骤3:现在,您必须启动SQL Server服务(SQLEXPRESS),为此,您必须按鼠标右键单击SQL Server(代理)服务,然后选择“启动”。选项来启动服务。
步骤4:,您可以看到服务状态正在运行,现在您应该再次尝试连接SQL Server数据库引擎。
答案 2 :(得分:0)
因为您正在docker容器中运行,所以我假设您还使用某种形式的环境管理(厨师,木偶,詹金斯)等。仔细检查您环境中的所有参与者。也许其中之一是检测代理状态以及是否应允许使用代理xp。此外,如果您在域中,则可能需要检查SQL策略和AD策略。但是反转发生的速度表明docker实例中的代理太怪。
答案 3 :(得分:0)
我设法使用“ cmd”解决了进入docker容器的问题,然后运行特定的命令来启动Windows服务。
1)docker exec -it YourSQLServerContainerName cmd
2)net start sqlserveragent
您可以停止并启动容器,它会保持运行状态。
答案 4 :(得分:0)
我遇到了同样的问题,这里是如何解决我的问题。
首先,我使用 mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-16.04 映像将SQL Server安装为Docker容器,并使用host network_mode用于数据库容器。
接下来,在查看SQL Agent日志后,我注意到它无法连接到服务器。
$ tail -100f /var/opt/mssql/log/sqlagent.1 # read agent's logs
...
2020-10-03 21:25:01 - ! [000] Unable to connect to server '(local),1433'; SQLServerAgent cannot start
2020-10-03 21:25:01 - ! [103] SQLServerAgent could not be started (reason: Unable to connect to server '(local),1433'; SQLServerAgent cannot start)
2020-10-03 21:25:06 - ! [298] SQLServer Error: 11001, TCP Provider: No such host is known. [SQLSTATE 08001]
...
最后,我从日志中发现SQL Agent试图与实例'(local),1433'连接,因此我的解决方案是解析 local 和 sqlserver 带有本地IP的主机。通过将以下记录添加到服务器的 / etc / hosts 文件中,可以完成此操作。
127.0.0.1 local
127.0.0.1 sqlserver
答案 5 :(得分:0)
我从日志中发现SQL Agent试图与/var/opt/mssql/log/sqlagent.out中的实例'(local),1433'连接
我正在使用更新了Sql Server 2017的Amazon Linux 2。
通过将以下记录(第一行)添加到服务器的/ etc / hosts文件中,用本地I编辑本地和sqlserver主机。
172.31.1.200 ip-172-31-1-200
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: 1 localhost6 localhost6.localdomain6