Docker Windows, как сохранить контейнер без входа в систему? - PullRequest
1 голос
/ 05 марта 2019

У меня установлен Docker на виртуальной машине с Windows Server 2016.

У меня есть контейнер Linux из Python3 с сервером NGINX, использующий параметр --restart=always, он работает нормально, когда я вошел в систему, если я перезапущуВМ, контейнер больше не активен, и он запускается, только если я вхожу в систему.

Также, если я выхожу из системы, контейнер останавливается.

Как я могу заставить контейнер работатькак сервис без входа в систему и оставить его работающим при выходе из системы?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Поскольку для того, чтобы сделать эту работу, мне пришлось испытать немало усилий, вот решение, которое помогло мне запустить контейнер 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 и найдите свой сервис в списке сервисов. Щелкните правой кнопкой мыши -> Свойства -> Вход в систему и введите данные учетной записи службы в разделе «Эта учетная запись». Наконец, в общем выберите автоматический (отложенный) запуск и запустите службу.

Вероятно, не самый «по книге» метод, но он работал для меня.

0 голосов
/ 09 марта 2019

Какую версию Docker вы установили точно / подробно?

Процедура запуска Docker на сервере сильно отличается от процедуры для настольных компьютеров!Он основан исключительно на сценариях, как подробно описано в документах по виртуализации MS

. Исполняемое имя службы EE (enterprise) док-сервера Windows, кстати, действительно dockerd, как в linux.

...