在 Linux 上我曾经触发这个命令
docker logs wp-mysql 2>&1 | grep "ready for connections"
但是,我希望在 Windows 上搜索该字符串
我尝试了以下两次尝试,但它不仅显示了搜索到的行,还显示了一些我不需要的额外行。
docker logs wp-mysql 2>&1 | findstr "ready for connections"
和
docker logs wp-mysql 2> >(findstr 'ready for connections')
您能否建议一个 grep 替代方案来在 Windows 上的 docker 日志中搜索字符串?
此命令搜索任何字符串“ready”、“for”或“connections”:
findstr "ready for connections"
此命令搜索字符串“准备连接”:
findstr /C:"ready for connections"
这个命令应该可以解决您的问题:
docker logs wp-mysql 2>&1 | findstr /C:"ready for connections"
或者这个,前提是本机 Windows 命令 find 是您路径中找到的第一个命令,默认安装位置是 C:\Windows\System32,但有些人更喜欢将路径放在 unix find 命令中在内置窗口find命令之前:
docker logs wp-mysql 2>&1 | find "ready for connections"
使用选项/?展示如何使用 Windows 命令行实用程序。看看这两个命令的输出:
findstr /?
find /?
让我举一个实际的使用示例。
这里是一个示例以及 Docker 日志。我正在运行一个容器 ID 以 42 开头的 Docker 容器。我想了解为什么 Docker 容器在启动时失败。它尝试连接到 Mongoose DB,但容器失败。我重定向输出并使用 select-string 来实现此目的。
首先我运行这个命令:
docker logs 42 2>&1 | select-string -pattern "Error" | select LineNumber,Line
这会为我提供 LineNumber 和 Line,这样我就可以看到输出中的何处有带有文本“Error”的模式。
LineNumber Line
---------- ----
1 connection error: MongooseServerSelectionError: getaddrinfo ENOTFOUND mongodb
31 compatibilityError: null,
42 MongooseServerSelectionError: getaddrinfo ENOTFOUND mongodb
66 error: Error: getaddrinfo ENOTFOUND mongodb
68 name: 'MongoNetworkError'
86 compatibilityError: null,
您可以在类似的流上使用它,例如 Powershell 中基于字符串的字符串和文件。