docker - Docker Windows如何在不登录的情况下保持容器运行?
问题描述
我在带有 Windows Server 2016 的虚拟机中安装了 Docker。
我有一个来自 Python3 的 Linux 容器和使用--restart=always
参数的 NGINX 服务器,它在我登录时运行良好,如果我重新启动 VM,容器不再处于活动状态,并且只有在我登录时它才会启动。
此外,如果我注销,容器会停止。
如何使容器在没有登录的情况下作为服务运行并在注销时保持运行?
解决方案
摘要是构建一个任务并将其分配给Task Scheduler
在 Windows 启动时运行。
所有脚本都应该在powershell上运行
登录到您希望 Docker 服务自动启动的 Windows 服务器/机器。
在您选择的位置创建一个名为 startDocker.ps1 的文件,并将以下脚本保存在其中:
start-service -Name com.docker.service
start C:\'Program Files'\Docker\Docker\'Docker Desktop.exe'
验证 Docker.exe 在您的机器上的位置是否正确,否则在脚本中相应地对其进行修改。
创建一个名为 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] { }
- 修改脚本:您必须根据您的计算机/服务器更改上述脚本中的一些内容。
在该$action
行中,将startdocker.ps1
脚本文件的位置更改为您放置此文件的位置。
在该Register-ScheduledTask
行中,将帐户用户和密码更改为需要在 Windows 启动时启动 Docker 服务的帐户用户。
- 执行 registerTask.ps1
以管理员身份打开 Windows Powershell 并将当前目录设置为您放置的位置registerTask.ps1
。例如
cd C:\PewershellScripts\
接下来执行这个脚本如下
.\PowershellScripts\
推荐阅读
- javascript - 在javascript中将复杂代码组合为字符串
- mysql - SQL 数据复制
- sql - 如何将 Excel 中的数据插入 Spark SQL 中的临时表中
- python - 合并 2 个字典并将它们存储在 pandas 数据框中,其中一个字典具有可变长度列表元素
- python - 无法在 Python 中将 Matlab 时间戳转换为日期时间
- sql-server - 如何在名称中创建具有动态约束 UUID 的临时表
- android - 是否有适用于 Wear OS 应用程序的时间选择器小部件?
- html - 如何使用 CSS 将单词换到下一行?
- c# - 在特定单词之后以字符串格式提取部分 URL
- javascript - HTML / CSS - 如何使覆盖视频文本完全响应?