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

How to start Docker daemon (windows service) at startup without the need to log-in?

我们在 Windows Server 2016 Datacenter 机器上安装了 Docker for Windows。

我们使用这个盒子作为我们 docker 容器的构建代理。

当我们尝试通过守护进程连接到此框以构建容器时,我们收到一条错误消息,指示守护进程不是 运行ning(在 post 末尾)。

但是,如果我使用我的 AD 帐户 登录 到此框,守护程序将启动,运行s,然后我可以连接并执行我需要的一切做。

有没有办法让守护进程在引导时启动而不需要用户登录?如果用户已登录,该服务似乎 运行。

错误信息:

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.

我试过的:

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

我可以确认 上面的评论。似乎没有任何效果。我非常勤奋地将任务计划程序设置为 运行 在 SYSTEM 用户下具有提升的权限等,但仍然没有运气。

我确实找到了一种需要第三方软件的解决方案。软件AlwaysUp允许Docker到运行启动时无需登录。

I followed the instructions,除了 Docker 工具作为 运行 的可执行文件,我指向 reference\dockerd.exe。重新启动服务器,果然我现在可以连接到我的远程守护进程了。

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

windows 服务器的最佳解决方案是使用 Task Scheduler 创建 运行 "Docker Desktop" 应用程序在系统启动时的任务。

要执行该搜索 "Task Scheduler",请单击 "create task..."。

在新选项卡上为任务指定名称并选择 "Run whether user is logged on or not" 单选按钮和 "Run with highest privilege" 复选框。在页面末尾 select 适当的 windows 类型。

现在单击触发器选项卡并添加新触发器。在新触发器页面 select "At startup" 上单击确定。

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

作为docker启动,经过1分钟,容器启动可能需要一些时间(我的情况是4分钟)等几分钟,然后测试你的docker是否是运行宁.

这是创建计划任务的 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)

除@Leon V 外,经验证可在 windows 服务器 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>

如果这个问题出现在Windows10,只要尝试重启Docker服务即可。

我在 these instructions 之后开始工作了。

最重要的步骤是使用带有 At Startup 触发器的 Task Scheduler 添加任务并使其成为 Run whether user is logged in or not。您基本上可以按照 中的步骤操作。但是不是直接启动 Docker Desktop.exe,而是将其 运行 设为启动 Docker 桌面和 Docker 服务的 Power Shell 脚本,例如像这样:

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