Поскольку для того, чтобы сделать эту работу, мне пришлось испытать немало усилий, вот решение, которое помогло мне запустить контейнер Linux с помощью рабочего стола докера на виртуальной машине Windows 10.
Сначала прочитайте эту страницу , чтобы понять метод запуска сценария python в качестве службы Windows.
Затем запустите свой контейнер с помощью powershell и дайте ему имя, например,
docker run --name app your_container
В скрипте, который вы запускаете как сервис, например, в качестве основного метода вашего класса winservice, используйте subprocess.call(['powershell.exe', 'path/to/docker desktop.exe])
для запуска рабочего стола докера в сервисе. Затем дождитесь запуска докера. Я сделал это с помощью докера 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
Теперь вам нужно создать служебную учетную запись на виртуальной машине с правами локального администратора. Зайдите в раздел Сервисы в Windows и найдите свой сервис в списке сервисов. Щелкните правой кнопкой мыши -> Свойства -> Вход в систему и введите данные учетной записи службы в разделе «Эта учетная запись». Наконец, в общем выберите автоматический (отложенный) запуск и запустите службу.
Вероятно, не самый «по книге» метод, но он работал для меня.