如何在启动时启动Docker daemon(windows服务)而不需要登录?

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

我们在 Windows Server 2016 Datacenter 盒子上安装了适用于 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 任务计划程序中创建条目来执行 docker 启动时的
    executable
    com.service.docker
    升高 特权。
docker windows-server octopus-deploy docker-for-windows
9个回答
41
投票

Windows 服务器的最佳解决方案是使用

Task Scheduler
创建在系统启动时运行“Docker Desktop”应用程序的任务。

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

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

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

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

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


14
投票

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

$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)

4
投票

我按照这些说明现在可以正常工作了。

最重要的步骤是使用具有

At Startup

 触发器的任务计划程序添加任务并使其成为 
Run whether user is logged in or not
。您基本上可以按照
Milad Teimouri的答案中的步骤进行操作。但不要直接启动 Docker Desktop.exe
,而是让它运行启动 Docker 桌面和 Docker 服务的 Power Shell 脚本,例如像这样:

start "C:\Program Files\Docker\Docker\Docker Desktop.exe" start-service -Name com.docker.service
    

1
投票
我已经尝试了这篇文章中的所有方法,但它们都有缺陷。最后,我使用以下步骤来解决我的问题:

    设置启动后自动登录
  1. Docker Desktop 设置勾选“登录时启动 Docker Desktop”
  2. Docker 桌面设置取消选中“启动时打开 Docker 仪表板”
是的,我放弃在未登录时运行 Docker Desktop,我使用自动登录。

供参考。 如何在 Windows 11 上启用自动登录?

https://www.stellarinfo.com/article/windows-11-auto-login.php


0
投票
除了@Leon V,这已被验证可以在 Windows Server 2019 上运行,只需更改用户名和密码:

$trigger = New-ScheduledTaskTrigger -AtStartup $trigger.Delay = 'PT1M' $action = New-ScheduledTaskAction -Execute 'C:\Program Files\Docker\dockerd.exe' $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable -RestartCount 999 $settings.ExecutionTimeLimit = 'PT0S' $settings.RestartInterval = 'PT1M' Register-ScheduledTask -Action $action -Trigger $trigger -TaskName StartDockerAtStartup -Settings $settings -User <username> -Password <password>
    

0
投票
如果这个问题出现在Windows 10中,只需尝试重新启动Docker服务即可。


0
投票
显然,在命令提示符下,您可以将目录更改为 DockerInstallDirectory\Docker 资源并运行

C:\DockerInstallDirectory\Docker\resources> dockerd --register-service
在这里找到:

https://www.coretechnologies.com/products/AlwaysUp/Apps/StartDockerDaemonAsAWindowsService.html

由于所需的计算机不可用,我无法在接下来的 10 天内对此进行测试。当我这样做时,我会编辑结果。


-1
投票

注意,非免费软件解决方案,但有 30 天试用版。

我可以确认上面

eckes的评论。似乎什么都不起作用。我非常努力地将任务计划程序设置为在具有提升权限的 SYSTEM 用户下运行,等等,但仍然没有运气。

我确实找到了一种需要第三方软件的解决方案。软件

AlwaysUp允许Docker在启动时运行,无需登录。

我按照说明进行了操作,但我指向 reference\dockerd.exe

,而不是使用 Docker Tools 作为要运行的可执行文件。重新启动服务器,果然我现在可以连接到我的远程守护程序了。

我推荐这种方法作为最简单的解决方案。


-1
投票

Docker Settings

现在您可以在docker设置中勾选

登录时启动Docker Desktop选项,然后应用并重新启动。

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