如何在现有的docker容器中启用SQL Server代理

问题描述 投票:0回答:3

我在 Docker 上有一个正在运行的 SQL Server 映像,但是我需要启用 SQL Server Agent 来运行一些作业,但我没有成功。主要问题是容器有相当多的数据库和设置需要维护。命令“docker run -e”MSSQL_AGENT_ENABLED = true ...“”对我来说没有用,因为它创建了一个新容器,我会丢失当前配置。

我使用了以下允许启用接口的命令,但是在运行作业时出现错误,提示 SQL Server 代理未启用

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Agent XPs',1
reconfigure 

执行作业时产生的错误如下

执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo) SQLServerAgent 当前未运行,因此无法通知该操作。 (Microsoft SQL Server,错误:22022)

我尝试使用命令

EXEC xp_servicecontrol N'START ', N'SQLServerAGENT'
启动 SQL Server 代理,但它生成了另一个错误

StartService() 返回错误 1053,“服务未及时响应启动或控制请求。”

问题是,如何在已运行的容器中启用 SQL Server 代理以能够调度作业

sql-server docker sql-server-agent
3个回答
22
投票

如果您已经使用 SQL Server 2019 Developer Edition 等创建了 Docker 容器:

$ docker run -e ACCEPT_EULA=Y -e MSSQL_PID=Developer -e MSSQL_SA_PASSWORD=YourStrongPassw0rd -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
57301203bac57455a118e0dbe6ff392cb19313375c134050e6ecd77414555e7e

参考使用mssql-conf工具在Linux上配置SQL Server,在容器中获取root shell:

$ docker exec -it --user root 57301203bac5 bash

然后在配置文件中启用SQL Agent并重新启动SQL Server服务:

root@57301203bac5:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled true
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.

root@57301203bac5:/# systemctl restart mssql-server.service

如果您收到诸如

systemctl: command not found
之类的错误消息,则只需停止并启动容器即可使更改生效。


9
投票

通过执行以下操作从容器外部进入终端:

sudo docker exec -it --user root sql1 "bash"

密码不是容器的密码。

接下来将自己提升为超级用户:

su -

接下来通过更改配置文件启用sqlagent:

/opt/mssql/bin/mssql-conf set sqlagent.enabled true

现在退出容器,输入 exit 一次以从 root 注销,然后退出容器

exit
exit

最后重新启动运行 microsoft sql server 实例的 docker 容器

(在本例中标记为 sql1)

docker restart sql1

注意在 SQL Management Studio 中,您需要右键单击 SQL Server 代理图标并刷新以验证它是否已启动。

请注意,如果您在初始化容器时使用该标志启用了 SQL Server 代理,则不再需要执行此操作:

docker run -d -p 1433:1433 --env ACCEPT_EULA=Y --env SA_PASSWORD='MYSUP3RS@!3' --env MSSQL_AGENT_ENABLED=True --name sql1 mcr.microsoft.com/mssql/server:2019-GDR1-ubuntu-16.04 

0
投票

对于任何使用 Docker Compose 的人来说,只需向 yaml 环境添加一个标志就容易得多:

environment:
  MSSQL_AGENT_ENABLED: true

然后再次将容器上下移动。

更多信息请访问 Microsoft.com

感谢 Mickeybyte:https://stackoverflow.com/a/76182745

© www.soinside.com 2019 - 2024. All rights reserved.