Я только начал с Docker на Windows, и у меня довольно интересная задача.
У меня есть служба, встроенная в образ Docker, которая может читать только переменные среды уровня машины, поэтому цель состоит в том, чтобы проанализировать env
из Docker (или K8s spe c) в время выполнения, затем преобразуйте переменные среды процесса в переменные среды компьютера. Эта проблема хорошо описана в этом блоге Элтона.
Теперь, когда я использую скрипт Powershell bootstrap, чтобы скопировать переменные среды процесса в переменные среды машины в качестве команды ENTRYPOINT, все это прекрасно работает. См. Это gist
ENTRYPOINT ["powershell", "./bootstrap.ps1"]
Однако в качестве ENTRYPOINT контейнера в соответствии со спецификацией должен использоваться EXE-файл, поэтому я решил создать задачу для запуска * Скрипт 1040 * .ps1 при запуске.
RUN $action = New-ScheduledTaskAction -Execute 'C:\BootstrapInit.bat""'; \
$trigger = New-ScheduledTaskTrigger -AtStartup ; \
$principal = New-ScheduledTaskPrincipal -UserID "SYSTEM" ; \
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel; \
Register-ScheduledTask -TaskName 'BootstrapMyApp' -Action $action -Trigger $trigger -Description 'blba' -Settings $settings -Principal $principal;
пакетный файл вызывает Powershell следующим образом:
Powershell.exe -ExecutionPolicy ByPass -File C:\boostrap.ps1
Проблема:
Сценарий успешно выполнен, но не может найти переменные среды процесса, которые были установлены во время выполнения. Скорее всего, это связано с тем, как Powershell управляет переменными среды в сеансе.
Вопрос:
Есть ли способ перезагрузить переменные среды уровня процесса, которые были установлены при запуске контейнера, чтобы сделать их доступными для ScheduledTask?