Я пытался установить и запустить Docker на виртуальной машине Windows, чтобы лучше понять среду выполнения для последующей работы, и у меня возникают проблемы, начиная с hello-world
контейнер.
Выход из docker version
:
Client:
Version: 17.06.2-ee-6
API version: 1.30
Go version: go1.8.3
Git commit: e75fdb8
Built: Mon Nov 27 22:46:09 2017
OS/Arch: windows/amd64
Server:
Version: 17.06.2-ee-6
API version: 1.30 (minimum version 1.24)
Go version: go1.8.3
Git commit: e75fdb8
Built: Mon Nov 27 22:55:16 2017
OS/Arch: windows/amd64
Experimental: false
hello-world
образ.Запуск любого контейнера. Мы пробовали несколько:
hello-world:nanoserver
hello-world:latest
microsoft/nanoserver:latest
microsoft/windowsservercore:latest
Когда я пытаюсь запустить контейнер, используя docker run {container-name-here}
, PowerShell зависает на значительное время (пару минут) и выводит следующее сообщение:
C:\Program Files\docker\docker.exe: Error response from daemon: container
{container-id-here} encountered an error during Start: failure in a
Windows system call: This operation returned because the timeout
period expired. (0x5b4).
в docker events
log, я одновременно получаю следующие сообщения:
2018-04-18T09:36:27.881680400-04:00 container create {container-id-here} (image=hello-world:nanoserver, name=confident_ardinghelli)
2018-04-18T09:36:27.883680800-04:00 container attach {container-id-here} (image=hello-world:nanoserver, name=confident_ardinghelli)
2018-04-18T09:36:28.753726900-04:00 network connect {network-id-here} (container={container-id-here}, name=nat, type=nat)
2018-04-18T09:40:21.373395500-04:00 network disconnect {network-id-here}(container={container-id-here}, name=nat, type=nat)
Мы получаем сообщение о тайм-ауте между network connect
и network disconnect
.
Ссылки, которые я нашел в моем поиске (Вот, и Вот) указывают на то, что это может быть проблема с антивирусом, но мне не удалось найти никакой документации о том, как подтвердить, что это проблема с антивирусом или какой антивирусный компонент может быть проблемой, за исключением отключения антивируса и повторной попытки. Я работаю над тем, чтобы связаться с людьми, у которых есть доступ к этой части системы, и попробую еще раз, я обновлю результаты.
Мы поговорили с командой безопасности, включили и отключили различные антивирусные компоненты. Когда мы отключили McAfee Host IPS (HIPS), мы смогли запустить любой из наших контейнеров, как и ожидалось. Когда мы включаем его снова, контейнеры снова ломаются! Мы обнаружили в журнале HIPS предупреждение об отказе в чтении реестра, которое совпадает по времени с нашим сеансом отладки, и отследили этот доступ к реестру обратно к процессу docker.exe, используя Монитор процессов от Microsoft Sysinternals. Похоже, у нас есть виновник!
Я сообщу, когда мы добавим запись в белый список для правила и подтвердим исправление.
В этом случае McAfee Host Intrusion Prevention Service (HIPS) препятствовала запуску Docker. McAfee HIPS предоставляет ряд правил мониторинга вторжений, и одно из них, предотвращающее несанкционированный доступ к реестру, срабатывало. Мы отключили правило для docker.exe
, и с тех пор все идет гладко!
Мы определили это, отладив Docker, отключив отдельные компоненты безопасности до тех пор, пока докер не сможет работать, а затем снова включили все, кроме HIPS, чтобы убедиться, что ничто другое не мешает. Затем мы повторно включили HIPS, воспроизвели проблему и проверили журналы HIPS на наличие предупреждения, совпадающего по времени.
Docker CLI пытался получить доступ к следующим разделам реестра, но ему было отказано в доступе:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\docker.exe
Мы использовали Монитор процессов от Microsoft Sysinternals чтобы убедиться, что доступ к реестру был связан с docker.exe.
Наконец, мы отключили это правило HIPS для docker.exe
, и теперь мы можем успешно запускать произвольные контейнеры.