我们在 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.
我尝试过的:
executable
和 com.service.docker
升高
特权。Windows 服务器的最佳解决方案是使用
Task Scheduler
创建在系统启动时运行“Docker Desktop”应用程序的任务。
为此,请搜索“任务计划程序”,单击“创建任务...”。
在新选项卡上指定任务名称,然后选择“无论用户是否登录都运行”单选按钮和“以最高权限运行”复选框。在页面末尾选择适当的窗口类型。
现在单击触发器选项卡并添加新触发器。在新的触发器页面上选择“启动时”,然后单击“确定”。
最后,单击操作选项卡并添加一个运行“Docker windows”快捷方式的新操作,该快捷方式在 Windows 上运行 docker 守护进程。
当 docker 启动时,经过 1 分钟,容器启动可能需要一些时间(在我的例子中是 4 分钟)等待几分钟,然后测试你的 docker 是否正在运行。
这是一个创建计划任务并经验证可在 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)
我按照这些说明现在可以正常工作了。
最重要的步骤是使用具有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
$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>
注意,非免费软件解决方案,但有 30 天试用版。
我可以确认上面eckes的评论。似乎什么都不起作用。我非常努力地将任务计划程序设置为在具有提升权限的 SYSTEM 用户下运行,等等,但仍然没有运气。
我确实找到了一种需要第三方软件的解决方案。软件AlwaysUp允许Docker在启动时运行,无需登录。
我按照说明进行了操作,但我指向 reference\dockerd.exe
,而不是使用 Docker Tools 作为要运行的可执行文件。重新启动服务器,果然我现在可以连接到我的远程守护程序了。我推荐这种方法作为最简单的解决方案。
现在您可以在docker设置中勾选
登录时启动Docker Desktop选项,然后应用并重新启动。