如何在启动时启动Docker守护进程(Windows服务)而无需登录?

Cla*_*ild 9 windows-server octopus-deploy docker docker-for-windows

我们在Windows Server 2016数据中心框中安装了Windows版Docker。

我们使用此框作为docker容器的构建代理。

当我们尝试通过守护程序连接到此框以构建容器时,会收到一条错误消息,指示守护程序未运行(在发布结束时)。

但是,如果我使用我的AD帐户登录到此框,则守护程序将启动,运行,然后我就可以连接并完成我需要做的所有事情。

有没有一种方法可以使守护进程在启动时启动而无需用户登录?仅当用户登录时,该服务才能运行。

错误信息:

error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.37/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=[NameRemovedForPrivacy]&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=[keyRemovedForPrivacy]&shmsize=0&t=[serverNameRemovedForPrivacy]&target=&ulimits=null: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

我尝试过的

  • 已验证的Docker在Windows服务中列出,并配置为自动启动。
  • 在Windows Task Scheduler中创建条目以执行 docker executablecom.service.docker在启动时使用优先权限。

Mil*_*uri 14

Windows 服务器的最佳解决方案是Task Scheduler在系统启动的情况下创建运行“Docker 桌面”应用程序的任务。

要搜索“任务计划程序”,请单击“创建任务...”。

在新选项卡上指定任务的名称,然后选择“无论用户是否登录都运行”单选按钮和“以最高权限运行”复选框。在页面末尾选择适当的窗口类型。

创建任务

现在单击触发器选项卡并添加新触发器。在新的触发器页面上选择“启动时”,然后单击“确定”。

在此处输入图片说明

最后,单击操作选项卡并添加一个运行“Docker windows”快捷方式的新操作,该快捷方式在 Windows 上运行 docker 守护程序。

创建动作

当 docker 启动时,经过 1 分钟,容器启动可能需要一些时间(在我的情况下为 4 分钟),等待几分钟,然后测试您的 docker 是否正在运行。

  • 不幸的是,我无法在带有最新 Docker 的 Windows Server 2019 上工作。在任务管理器中,我可以看到 Docker Desktop 及其所有相关进程(以及 com.docker.service)在启动时运行。但是,没有一个容器运行。在管理员命令提示符中运行“docker container ls”会出现“连接期间出错:在 Windows 上的默认守护进程配置中,docker 客户端必须以提升的权限运行才能连接。” (7认同)
  • 伙计们,我尝试了这个解决方案,但即使它解决了问题,我也观察到 Docker 托盘图标消失了,并且在将其设置为服务后我无法再打开仪表板...有人遇到过这种行为吗? (2认同)

Leo*_*n V 8

这是一个 PowerShell 脚本,用于创建计划任务并经验证可在 Windows 10 上运行:

$trigger = New-ScheduledTaskTrigger -AtStartup
$trigger.Delay = 'PT1M'

$action = New-ScheduledTaskAction -Execute 'C:\Program Files\Docker\Docker\Docker Desktop.exe'

$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable -RestartCount 999
$settings.ExecutionTimeLimit = 'PT0S'
$settings.RestartInterval = 'PT1M'

Register-ScheduledTask -Action $action -Trigger $trigger -TaskName Docker -Settings $settings -User $env:UserName -Password (ConvertFrom-SecureString (Read-Host -Prompt 'Password' -AsSecureString) -AsPlainText)
Run Code Online (Sandbox Code Playgroud)

  • 此答案仅适用于 PowerShell 7+。 (2认同)