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

时间:2018-07-09 18:46:50

标签: docker windows-server octopus-deploy 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在启动时启动 特权。

5 个答案:

答案 0 :(得分:4)

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

public class A<T> : A where T : class, new()
{
    [System.Text.Json.Serialization.JsonPropertyName("TObject")]
    [Newtonsoft.Json.JsonIgnore]
    public object SerializedTObject => TObject;

    [System.Text.Json.Serialization.JsonIgnore]
    public T TObject { get; set; } = new T();
}

答案 1 :(得分:0)

我可以确认上面的eckes'条评论。似乎没有任何作用。我非常努力地将Task Scheduler设置为在特权较高的SYSTEM用户下运行,但是仍然没有运气。

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

I followed the instructions,除了指向Docker Tools作为要运行的可执行文件之外,我指出了reference\dockerd.exe。重新启动服务器,并且确定我现在可以连接到远程守护程序。

我建议将此方法作为最简单的解决方案。

答案 2 :(得分:0)

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

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

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

Create Task

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

enter image description here

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

Create Action

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

答案 3 :(得分: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>

答案 4 :(得分:0)

如果此问题出现在 Windows 10 中,请尝试重新启动 Docker 服务。

相关问题