Как получить доступ к журналу событий Windows контейнера Docker

Как получить доступ к журналу событий Windows контейнера Microsoft Docker с хоста?

У меня есть докер-контейнер под Windows Server 2016.

Контейнер основан на образе: microsoft/iis

Я могу получить IP-адрес контейнера с помощью:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" my-running-site

Как я могу подключиться к нему через средство просмотра событий на хосте Windows?


person Greg Pagendam-Turner    schedule 19.12.2016    source источник
comment
хороший вопрос! конечно, вы можете включить powershell в свой контейнер и использовать get-eventlog, как и ожидалось, но подключение с хоста к контейнеру будет означать, что контейнер прослушивает внешний запрос для журнала событий. Если вы проверите свой контейнер на прослушивание портов, прослушивается только порт 135 (RPC), что МОЖЕТ быть правильным. Следующий шаг — показать этот порт снаружи с помощью docker run -p 135:135..., но во время моей попытки это не сработало... как насчет того, чтобы опубликовать этот вопрос на форумах докеров или контейнеров или GitHub?   -  person Falco Alexander    schedule 23.12.2016
comment
Я не уверен, что журнал событий подходит для ведения журнала внутри контейнеров. Хотя это традиционный инструмент в Windows, легкий характер контейнеров делает перенаправление на stdout и stderr лучшими кандидатами для ведения журнала для контейнеров. Это имеет дополнительные преимущества, такие как делегирование анализа журнала таким инструментам, как logstash и elasticsearch. Тогда проще запрашивать несколько контейнеров и хранить журналы централизованно. Также перенаправление на stdout и stderr позволяет вам легко запускать журналы докеров... из командной строки вашего хоста, чтобы легко получать журналы.   -  person Alex H    schedule 28.12.2016
comment
Я не всегда могу контролировать, что и где регистрируется. Если я открываю порт 135, я получаю «Отказано в доступе (5)».   -  person Greg Pagendam-Turner    schedule 03.01.2017
comment
В настоящее время я понимаю ваш вопрос: можно ли разрешить приложению (например, IIS), работающему внутри контейнера, регистрировать события в журнале событий Windows и использовать средство просмотра событий Windows с хоста для просмотра этих событий. Я правильно понимаю? Мне тоже интересно узнать ответ.   -  person robbie fan    schedule 13.03.2019
comment
Я тоже. Мне тоже интересно, как мы можем это сделать? Как насчет запуска процесса, продолжающего записывать журналы в папку данных, и хост может получить к ней доступ?   -  person james    schedule 13.03.2019
comment
@GregPagendam-Turner Вы получили какое-либо решение или исправили проблему? Я испробовал много разных подходов, но не могу скопировать файлы журналов на локальный диск   -  person    schedule 09.02.2021


Ответы (3)


Создайте сеанс powershell для контейнера.

docker exec -it  <container_id> powershell

Затем из контейнера получите последние журналы событий.

Get-Eventlog -newest 20 application

Команда выше поможет вам найти индекс,

(Get-Eventlog -index xxx application).message
person Praveen Kumar    schedule 16.07.2019
comment
Не сработал амиго. Дает OCI runtime exec failed: exec failed: container_linux.go:370: запуск процесса контейнера вызван: exec: powershell: исполняемый файл не найден в $PATH: неизвестно - person ; 05.02.2021
comment
У вас установлен PowerShell в контейнере. Если нет, попробуйте с помощью bash или cmd - person Praveen Kumar; 07.02.2021
comment
Я выполнил шаги, описанные выше, и также исправил проблему, установив powershell. Однако я не могу скопировать файл log.json из Docker на свой локальный диск в Windows. Я следовал этому подходу. kb.sitecore.net/articles/383441 - person ; 07.02.2021
comment
Итак, если это возможно скопировать, почему я не могу скопировать и запустить эти команды? У меня аналогичная проблема, как на следующей странице. Вы можете опубликовать свой ответ на него, как я следую ему. stackoverflow.com/questions/66055244/ - person ; 07.02.2021
comment
Вы получили какое-либо решение или исправили проблему? Я испробовал много разных подходов, но не могу скопировать файлы журналов на локальный диск - person ; 09.02.2021

Docker Engine регистрируется в журнале событий «Приложения» Windows, а не в файле. Эти журналы можно легко читать, сортировать и фильтровать с помощью Windows PowerShell.

Например, это покажет журналы Docker Engine за последние 5 минут, начиная с самых старых.

Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time 
person user3411864    schedule 15.08.2017
comment
Я не думаю, что это решение, так как вы получаете только исходный код Docker, а не процесс, работающий внутри контейнера. - person james; 13.03.2019
comment
Да, это не журналы IIS. В Azure это намного проще. - person Triynko; 05.04.2019

На PWSH (ядро Powershell):

Get-WinEvent -LogName Application
person SteveSims    schedule 06.12.2019