Docker Windows如何保持容器运行而无需登录?

时间:2019-03-05 17:25:05

标签: docker windows-server

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

我有一个使用--restart=always参数的NGINX服务器的Python3 Linux容器,在我登录时它运行良好,如果重新启动VM,该容器将不再活动,并且只有在登录后才能启动内。

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

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

2 个答案:

答案 0 :(得分:0)

您确切/详细安装了哪个版本的Docker?

让docker在服务器上运行的过程与台式机完全不同! 它完全基于脚本,如MS virtualization docs

中所述

Windows服务器docker EE(企业)服务的可执行文件名称的确与Linux中的dockerd一样。

答案 1 :(得分:0)

自从我为了完成这项工作经历了很多痛苦之后,这是一个适用于我的解决方案,用于在Windows 10 VM上使用docker桌面运行linux容器。

首先,请阅读this页,以了解将python脚本作为Windows服务运行的方法。

然后使用powershell运行容器并为其命名,例如

docker run --name app your_container

在作为服务运行的脚本中,例如winservice类的主要方法,使用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)

客户端启动后,再次使用子流程运行您的应用

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中的“服务”,然后在服务列表中找到您的服务。右键单击->属性->登录,然后在“此帐户”下输入服务帐户详细信息。最后,在一般情况下,选择自动(延迟)启动并启动服务。

可能不是最“靠书”的方法,但是它对我有用。