После многих часов проб и ошибок и целого поиска rnet я с радостью могу сказать, что мне удалось успешно установить Access Runtime в контейнер Docker. Ответ на эту ветку привел меня в правильном направлении.
Солнце, луна и звезды должны все выровняться, чтобы заставить это работать, поэтому я надеюсь, что этот ответ поможет кому-то в будущее.
Во-первых, для записи я использую базовый образ ОТ mcr.microsoft.com/windows:1809-amd64, который можно развернуть до Azure. К сожалению, образ серверного ядра не подходит, потому что Access Database Engine (у меня была отдельная зависимость) не работает на ядре сервера.
Во-вторых, во время установки вы должны использовать USER ContainerAdministrator .
В-третьих, перед запуском setup.exe вы должны установить этот ключ реестра:
reg.exe add HKLM\System\CurrentControlSet\Services\sppsvc /v Start /t REG_DWORD /d 2 /f
Я не совсем знаю, что это делает, но имеет какое-то отношение к активации. Он переводит ОС в состояние, достаточное для установки Access Runtime. Этот фрагмент я получил в этом потоке.
По умолчанию значение равно 4, и это значение равно 2. После установки я не восстановил это значение до 4 и не протестировал его.
Другим важным моментом является то, что установка этого параметра реестра должна выполняться в операторе RUN до и независимо от RUN , который запускает setup.exe. Это связано с тем, что после установки требуется перезагрузка. Это означает, что вы не можете вручную проверить это самостоятельно из оболочки и должны использовать Dockerfile для тестирования этого сквозного.
В-четвертых, при запуске setup.exe вы должны запустить его в очень конкретном c way:
RUN cmd.exe /C setup.exe /config temp.log
Здесь важен дополнительный cmd.exe / C. Причина этого в том, что setup.exe запускает новую оболочку и немедленно возвращается, если у вас нет cmd.exe / C. Это означает, что действие немедленно возвращается к Docker, и оно переходит в странное состояние. Мне понадобилось время, чтобы понять это. cmd.exe / C позволяет достаточно подождать. На самом деле я использую PowerShell просто для большей уверенности:
$access_runtime_setup_process = Start-Process -FilePath 'cmd.exe' -ArgumentList \"/C $access_runtime_temp_directory\setup.exe /config $access_runtime_config_file\" -NoNewWindow -Wait -PassThru; `
if ($access_runtime_setup_process.ExitCode -ne 0) { `
Write-Host \"PROCESS FAILED: $access_runtime_temp_directory\setup.exe (Exit Code: $($access_runtime_setup_process.ExitCode))\"; `
exit 1; `
}
Наконец, я закончил установку ядра базы данных Access после Access Runtime. Я не тестировал наоборот, возможно, он тоже работает.
После установки Access Database Engine я сделал USER ContainerUser для восстановления пользователя.
Мне не нужно было устанавливать V C Runtime или. NET Framework, единственные вещи, которые мне нужно было установить, - это среда выполнения и ядро базы данных.
Если кому-то еще придется столкнуться с болью используя устаревшее программное обеспечение, такое как Access, в контейнере Docker, надеюсь, это поможет вам!