Docker Windows如何在没有登录的情况下保持容器运行?

问题描述 投票:1回答:2

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

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

此外,如果我退出,容器会停止。

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

docker windows-server
2个回答
1
投票

由于为了完成这项工作我经历了相当多的痛苦,这里有一个解决方案,对我来说,在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中的“服务”,然后在服务列表中找到您的服务。右键单击 - >属性 - >登录,然后在“此帐户”下输入服务帐户详细信息。最后,一般情况下,选择自动(延迟)启动并启动服务。

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


0
投票

什么版本的docker你准确安装/详细?

让docker在服务器上运行的过程与桌面有很大不同!它是纯粹基于脚本的,如MS virtualization docs中详细描述的那样

Windows服务器docker EE(企业)服务的可执行文件名称确实是dockerd,就像在linux中一样。

© www.soinside.com 2019 - 2024. All rights reserved.