如何访问 Docker 容器的 Windows 事件日志

Posted

技术标签:

【中文标题】如何访问 Docker 容器的 Windows 事件日志【英文标题】:How do I access Windows eventlog of a Docker container 【发布时间】:2017-05-04 02:01:50 【问题描述】:

如何从主机访问 Microsoft Docker 容器的 Windows 事件日志?

我在 Windows Server 2016 下有一个 docker 容器。

容器基于镜像:microsoft/iis

我可以通过以下方式获取容器的 IP 地址:

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

如何通过 windows 主机上的事件查看器连接到它?

【问题讨论】:

好问题!当然,您可以在容器中使用 powershell 并按预期使用get-eventlog,但是从主机连接到容器意味着容器正在侦听事件日志的外部请求。如果您检查容器的侦听端口,则只有端口 135 (RPC) 侦听,这可能是正确的。下一步是使用docker run -p 135:135... 将该端口暴露给外部,但在我的尝试过程中它不起作用......在 docker 或容器论坛或 GitHub 上发布这个问题怎么样? 我不确定事件日志是否是在容器内进行日志记录的方式。虽然它是 Windows 中的传统工具,但容器的轻量级特性使得重定向到 stdout 和 stderr 成为容器日志记录的更好选择。这还有其他好处,例如将日志分析委托给 logstash 和 elasticsearch 等工具。然后更容易查询多个容器并集中存储日志。还可以重定向到 stdout 和 stderr 让您可以轻松地从主机的命令行运行 docker logs ... 以轻松获取日志。 我不能总是控制记录到哪里。如果我打开端口 135,我会得到“拒绝访问 (5)”。 我目前对你的问题的理解是:是否可以让一个容器内运行的应用程序(如IIS)将事件记录到Windows Event Log中,并从主机使用Windows Event Viewer查看那些事件。我理解正确吗?我也很想知道答案。 我也是。我也很好奇我们怎么做到的?运行一个进程不断将日志写入数据文件夹,并且主机可以访问它呢? 【参考方案1】:

为容器创建一个 powershell 会话

docker exec -it  <container_id> powershell

然后从容器中,获取最新的事件日志

Get-Eventlog -newest 20 application

上面的命令会帮你找到索引,

(Get-Eventlog -index xxx application).message

【讨论】:

没有工作的朋友。给出“OCI 运行时执行失败:执行失败:container_linux.go:370:启动容器进程导致:执行:“powershell”:在 $PATH 中找不到可执行文件:未知” 容器中是否安装了 PowerShell。如果没有,请尝试使用 bash 或 cmd 我按照上面的步骤,也通过安装powershell解决了这个问题。但是,我无法将包含的 Docker 中的 log.json 文件复制到我在 Windows 上的本地驱动器中。我遵循了这种方法。 kb.sitecore.net/articles/383441 那么,如果可以复制,为什么我不能复制并运行这些命令呢?我在下一页有类似的问题。当我关注它时,您可以发布您的答案。 ***.com/questions/66055244/… 您是否收到任何解决方案或解决了问题?我尝试了许多不同的方法,但 无法将日志文件复制到我的本地驱动器【参考方案2】:

Docker 引擎记录到 Windows“应用程序”事件日志,而不是文件。使用 Windows PowerShell 可以轻松读取、排序和过滤这些日志

例如,这将显示最近 5 分钟的 Docker 引擎日志,从最旧的开始。

Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time 

【讨论】:

我不认为这是一个解决方案,因为你只得到了 Docker 的源,而不是容器内运行的进程。 是的,那些不是 IIS 日志。这在 Azure 中要简单得多。【参考方案3】:

在 PWSH(Powershell 核心)上:

Get-WinEvent -LogName Application

【讨论】:

以上是关于如何访问 Docker 容器的 Windows 事件日志的主要内容,如果未能解决你的问题,请参考以下文章

Windows下Docker主机网络容器服务访问

解决Windows10下无法对docker容器进行端口访问(端口映射的问题)

如何在 Windows 10 docker 桌面中访问 /var/lib/docker?

如何从 Docker 容器内部访问在 WSL2 上运行的服务?

windows宿主机访问docker容器ip无法ping通

从 Docker 容器中的 Java 应用程序访问 Windows 10 中的文件夹