首页 > 解决方案 > Docker Windows如何在不登录的情况下保持容器运行?

问题描述

我在带有 Windows Server 2016 的虚拟机中安装了 Docker。

我有一个来自 Python3 的 Linux 容器和使用--restart=always参数的 NGINX 服务器,它在我登录时运行良好,如果我重新启动 VM,容器不再处于活动状态,并且只有在我登录时它才会启动。

此外,如果我注销,容器会停止。

如何使容器在没有登录的情况下作为服务运行并在注销时保持运行?

标签: dockerwindows-server

解决方案


我从这里得到了更好的答案

摘要是构建一个任务并将其分配给Task Scheduler在 Windows 启动时运行。

所有脚本都应该在powershell上运行

  1. 登录到您希望 Docker 服务自动启动的 Windows 服务器/机器。

  2. 在您选择的位置创建一个名为 startDocker.ps1 的文件,并将以下脚本保存在其中:

    start-service -Name com.docker.service

    start C:\'Program Files'\Docker\Docker\'Docker Desktop.exe'

验证 Docker.exe 在您的机器上的位置是否正确,否则在脚本中相应地对其进行修改。

  1. 创建一个名为 registerTask.ps1 的文件并将以下脚本保存在其中。

    $trigger = New-ScheduledTaskTrigger -AtStartup

    $action = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-File C:\PowershellScripts\startDocker.ps1"

    $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -AllowStartIfOnBatteries

    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Start Docker on Start up" -Settings $settings -User "Your user" -Password "Your user password" -RunLevel Highest

这是必需的,以便该用户可以访问 docker 服务

try 
{
    Add-LocalGroupMember -Group docker-users -Member "Your user" -ErrorAction Stop
} 
catch [Microsoft.PowerShell.Commands.MemberExistsException] { }
  1. 修改脚本:您必须根据您的计算机/服务器更改上述脚本中的一些内容。

在该$action行中,将startdocker.ps1脚本文件的位置更改为您放置此文件的位置。

在该Register-ScheduledTask行中,将帐户用户和密码更改为需要在 Windows 启动时启动 Docker 服务的帐户用户。

  1. 执行 registerTask.ps1

以管理员身份打开 Windows Powershell 并将当前目录设置为您放置的位置registerTask.ps1。例如

cd C:\PewershellScripts\

接下来执行这个脚本如下

.\PowershellScripts\

推荐阅读