Нахождение недостающей Dll на Windows Server Core в Docker

Я пытаюсь собрать консольное приложение в контейнере Windows Docker, используя Windows Server Core, в соответствии с этими инструкциями от Microsoft.

Проблема у меня заключается в том, что при запуске в контейнере приложение завершается без сообщения об ошибке. Я подозреваю, что это происходит из-за отсутствия системной библиотеки DLL в Windows Server Core, но в отличие от рабочего стола Windows нет всплывающего окна приложения для определения отсутствующей библиотеки DLL. Также нет ничего в системном журнале.

Что еще я могу сделать, чтобы решить проблему?

2 ответа

У меня сработало (более подробное объяснение см. здесь https://stefanscherer.github.io/find-dependentities-in-windows-containers/):

  1. Ядро сервера Windows виртуальной машины Azure
  2. Установите Procmon и отфильтруйте свой процесс через загрузку iwr.
  3. Поместите свой zip-архив в Azure BLOB и загрузите его через URL-адрес SAS и разверните tar, если архивировать.
  4. Начните свой процесс.
  5. Поиск записей о сбоях/ошибках.
  6. Prey, ваша недостающая DLL не является dll пользовательского интерфейса. Потому что у виртуальной машины Windows Core есть пользовательский интерфейс, а у версии Docker, похоже, нет.

Если кто-то ищет способ узнать, какая dll не была найдена/разрешена в контейнере без графического интерфейса, через несколько часов я нашел инструмент под названием «Зависимости», который был единственным, который мне действительно помог . Мусорная корзина Micorsoft разрешила только первый уровень дерева, а ldd из cygwin не смог разрешить имена некоторых DLL.

      Dependencies.exe -chain my_executable.exe

Зависимости могут построить целый граф со всеми DLL, которые загружаются рекурсивно, и определить их путь к системе. Из этого графика вы можете легко определить, чего не хватает, выполнив поиск по строке NOT_FOUND.

Пример вывода:

      ├ exe_dat.exe (ROOT) : ..\Release\exe_dat.exe 
|  ├ adtfstreaming_290.dll (ApplicationDirectory) : ..\Release\adtfstreaming_290.dll 
|  |  ├ MSVCP100.dll (WindowsFolder) : C:\Windows\system32\MSVCP100.dll 
|  |  |  ├ MSVCR100.dll (WindowsFolder) : C:\Windows\system32\MSVCR100.dll 
|  |  |  |  ├ KERNEL32.dll (WellKnownDlls) : C:\Windows\system32\kernel32.dll 
|  |  |  |  |  ├ api-ms-win-core-rtlsupport-l1-1-0.dll (ApiSetSchema) : C:\Windows\system32\ntdll.dll 
|  |  |  |  |  ├ ntdll.dll (WellKnownDlls) : C:\Windows\system32\ntdll.dll 
|  |  |  |  |  ├ KERNELBASE.dll (WellKnownDlls) : C:\Windows\system32\kernelbase.dll 
|  |  |  |  |  |  ├ ntdll.dll (WellKnownDlls) : C:\Windows\system32\ntdll.dll 
|  |  |  |  |  |  ├ api-ms-win-eventing-provider-l1-1-0.dll (ApiSetSchema) : C:\Windows\system32\kernelbase.dll 
|  |  |  |  |  |  ├ api-ms-win-core-apiquery-l1-1-0.dll (ApiSetSchema) : C:\Windows\system32\ntdll.dll 
|  |  |  |  |  |  ├ api-ms-win-core-apiquery-l1-1-1.dll (ApiSetSchema) : C:\Windows\system32\ntdll.dll 
|  |  |  |  |  |  ├ ext-ms-win-advapi32-registry-l1-1-0.dll (ApiSetSchema) : C:\Windows\system32\advapi32.dll 
...
Другие вопросы по тегам