Ale*_*dor 8 windows-server docker
我在装有 Windows Server 2016 的虚拟机中安装了 Docker。
我有一个来自 Python3 的 Linux 容器,带有使用--restart=always参数的 NGINX 服务器,它在我登录时运行良好,如果我重新启动虚拟机,该容器将不再活动,并且仅在我登录时启动。
另外,如果我注销,容器就会停止。
如何使容器在不登录的情况下作为服务运行并在注销时保持运行?
我从这里得到了更好的答案
摘要是构建一个任务并将其分配给Task Scheduler在 Windows 启动时运行。
登录到您希望自动启动 Docker 服务的 Windows 服务器/计算机。
在您选择的位置创建一个名为 startDocker.ps1 的文件,并将以下脚本保存在其中:
start-service -Name com.docker.service
start C:\'Program Files'\Docker\Docker\'Docker Desktop.exe'
Run Code Online (Sandbox Code Playgroud)
验证 Docker.exe 在您的计算机上的位置是否正确,否则在脚本中进行相应的修改。
$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
# This is needed so that this user has access to docker services
try
{
Add-LocalGroupMember -Group docker-users -Member "Your user" -ErrorAction Stop
}
catch [Microsoft.PowerShell.Commands.MemberExistsException] { }
Run Code Online (Sandbox Code Playgroud)
在该$action行中,将脚本文件的位置更改startdocker.ps1为放置此文件的位置。
在该Register-ScheduledTask行中将帐户用户和密码更改为需要在 Windows 启动时启动 Docker 服务的帐户用户。
以管理员身份打开 Windows Powershell 并将当前目录设置为您放置的位置registerTask.ps1。例如
cd C:\PewershellScripts\
Run Code Online (Sandbox Code Playgroud)
接下来执行这个脚本如下
.\registerTask.ps1
Run Code Online (Sandbox Code Playgroud)
小智 3
由于我为了完成这项工作经历了相当多的痛苦,因此这里有一个适合我的解决方案,可以在 Windows 10 虚拟机上使用 docker 桌面运行 Linux 容器。
首先,阅读本页以了解将 python 脚本作为 Windows 服务运行的方法。
然后使用 powershell 运行容器并为其命名,例如
docker run --name app your_container
Run Code Online (Sandbox Code Playgroud)
在作为服务运行的脚本中,例如 winservice 类的 main 方法,用于subprocess.call(['powershell.exe', 'path/to/docker desktop.exe])在服务中启动 docker 桌面。然后等待docker启动。我通过使用 docker SDK 完成了此操作:
client = docker.from_env()
started = False
while not started:
try:
info = client.info()
started = True
except:
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
当客户端启动时,再次使用子进程运行您的应用程序
subprocess.call(['powershell.exe', 'docker start -interactive app'])
Run Code Online (Sandbox Code Playgroud)
最后 ssh 进入您的容器以保持服务和容器处于活动状态
subprocess.check_call(['powershell.exe', 'docker exec -ti app /bin/bash'])
Run Code Online (Sandbox Code Playgroud)
现在使用安装服务python service.py install
现在,您需要在具有本地管理员权限的虚拟机上创建一个服务帐户。转到 Windows 中的“服务”,然后在服务列表中找到您的服务。右键单击 -> 属性 -> 登录,然后在“此帐户”下输入服务帐户详细信息。最后,在常规下,选择自动(延迟)启动并启动服务。
可能不是最“按书本”的方法,但它对我有用。
| 归档时间: |
|
| 查看次数: |
16392 次 |
| 最近记录: |