Docker - контейнер Windows завершает работу после скрипта

Я сделал несколько контейнеров (которые запускаются в среде Unix, где точкой входа является файл сценария. Эти файлы сценариев обычно управляют некоторой конфигурацией, а затем продолжают выполнение CMD с помощью exec "$@". При создании/тестировании такого image Обычно я возвращаюсь в командную строку, чтобы вручную подтвердить конфигурации. Это работает нормально. Однако сегодня я делал аналогичный образ, но на основе контейнера Windows (Microsoft/nanoserver), и здесь я столкнулся с несколькими проблемами.

1) Я сделал сценарий powershell для настройки, но в powershell я не могу использовать exec "$@" для передачи выполнения в CMD. Что эквивалентно в контейнере Windows?

2) Если я создам образ на основе microsoft/nanoserver и просто скопирую некоторые файлы, вы останетесь в интерактивном режиме (конечно, если вы запустите контейнер с параметрами -it). Но как только я укажу ENTRYPOINT на сценарий powershell, контейнер завершится сразу после запуска сценария, даже если я добавлю cmd к команде запуска.

Итак, в основном мой вопрос: как мне заставить его войти в командную строку после выполнения сценария? (с оконным контейнером).


person Galtrold    schedule 09.09.2017    source источник
comment
Ниже у меня отлично работает. Запуск скрипта и возврат подсказки # escape=` FROM microsoft/nanoserver SHELL [powershell, -Command, $ErrorActionPreference = 'Stop'; $ProgressPreference = 'Продолжить'; $verbosePreference='Continue';] точка входа powershell.exe {привет записи-вывода}; powershell.exe   -  person Gregory Suvalian    schedule 09.09.2017
comment
Спасибо, Григорий, у меня все заработало, как я хотел. Однако я понятия не имею, что такое SHELL [powershell, -Command, $ErrorActionPreference = 'Stop'; $ProgressPreference = 'Продолжить'; $verbosePreference='Continue';] делает. Также немного странно, что нам нужно иметь два оператора powershell.exe в ENTRYPOINT.   -  person Galtrold    schedule 15.09.2017
comment
@Galtrold Нет. С SHELL ["powershell"] ваш ENTRYPOINT запускается программой powershell.exe, поэтому это может быть любое допустимое выражение Powershell. Вы можете запустить файл скрипта напрямую или Invoke-Expression его.   -  person jmlane    schedule 07.03.2018
comment
Рассмотрим этот контейнер Docker, который использует скрипт в качестве точки входа github.com/PhilippHeuer/docker-gitlab-powershell   -  person spuder    schedule 10.04.2018


Ответы (1)


этот вопрос похож на Как поддерживать работу контейнера WIndows?

если вы добавите в конец вашего файла докеров

ping -t localhost

он должен оставить его работающим (... если, конечно, в файле нет других ошибок)

person JulioCT    schedule 01.11.2020