Назад | Перейти на главную страницу

Контейнер Docker hello-world не запускается на Windows Server 2016 поверх VMWare

Я пытался установить и запустить 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

Что сработало:

Что не имеет:

Запуск любого контейнера. Мы пробовали несколько:

Что я уже пробовал (безуспешно):

Что на самом деле происходит:

Когда я пытаюсь запустить контейнер, используя 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.

Ссылки, которые я нашел в моем поиске (Вот, и Вот) указывают на то, что это может быть проблема с антивирусом, но мне не удалось найти никакой документации о том, как подтвердить, что это проблема с антивирусом или какой антивирусный компонент может быть проблемой, за исключением отключения антивируса и повторной попытки. Я работаю над тем, чтобы связаться с людьми, у которых есть доступ к этой части системы, и попробую еще раз, я обновлю результаты.

Итак, что я на самом деле спрашиваю?

Обновление (2018-4-20):

Мы поговорили с командой безопасности, включили и отключили различные антивирусные компоненты. Когда мы отключили 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, и теперь мы можем успешно запускать произвольные контейнеры.