我在Windows Server 2016的虚拟机中安装了Docker。
我有一个来自Python3的Linux容器和使用--restart=always
param的NGINX服务器,它在我登录时运行正常,如果我重新启动VM,容器不再处于活动状态,并且仅在我登录时启动。
此外,如果我退出,容器会停止。
如何在没有登录的情况下使容器作为服务运行并在注销时保持运行?
由于为了完成这项工作我经历了相当多的痛苦,这里有一个解决方案,对我来说,在Windows 10 VM上使用docker desktop运行linux容器。
首先,阅读this页面以了解将python脚本作为Windows服务运行的方法。
然后使用powershell运行你的容器并给它一个名字,例如
docker run --name app your_container
在作为服务运行的脚本中,例如winservice类的主要方法,使用subprocess.call(['powershell.exe', 'path/to/docker desktop.exe])
在服务中启动docker desktop。然后等待docker启动。我是通过使用docker SDK完成的:
client = docker.from_env()
started = False
while not started:
try:
info = client.info()
started = True
except:
time.sleep(1)
客户端启动后,再次使用子进程运行您的应用程序
subprocess.call(['powershell.exe', 'docker start -interactive app'])
最后ssh到您的容器中以保持服务和容器的活着
subprocess.check_call(['powershell.exe', 'docker exec -ti app /bin/bash'])
现在使用python service.py install
安装服务
现在,您需要在具有本地管理员权限的VM上创建服务帐户。转到Windows中的“服务”,然后在服务列表中找到您的服务。右键单击 - >属性 - >登录,然后在“此帐户”下输入服务帐户详细信息。最后,一般情况下,选择自动(延迟)启动并启动服务。
可能不是最“通过书本”的方法,但它对我有用。
什么版本的docker你准确安装/详细?
让docker在服务器上运行的过程与桌面有很大不同!它是纯粹基于脚本的,如MS virtualization docs中详细描述的那样
Windows服务器docker EE(企业)服务的可执行文件名称确实是dockerd,就像在linux中一样。