从Docker容器登录macOS中的syslog/console?

Sam*_*Sam 6 ruby macos logging docker macos-sierra

我将Docker容器设置为将日志发送到CentOS 7上的主机日志(带--log-driver syslog).我想在macOS(Sierra)上复制这个.但它似乎没有出现在任何地方.

$ docker run --log-driver syslog -it busybox sh
/ # logger "Hello world!"
/ # exit
Run Code Online (Sandbox Code Playgroud)

和:

$ sudo cat /var/log/system.log | grep "Hello world"
Password:
$
Run Code Online (Sandbox Code Playgroud)

什么配置是必要的,以使任何容器的任何Docker系统日志记录命令都可以出现在macOS上的日志文件中?


如果我不配置日志驱动程序,我可以查看这些类型的默认系统日志记录.但Ruby的syslog实现必须以不同方式记录.

$ docker run --log-driver syslog -it centos /bin/bash
# yum install ruby -y
# ruby -e "require 'syslog/logger'; log = Syslog::Logger.new 'my_program'; log.info 'this line will be logged via syslog(3)'"
# exit
$ sudo tail -n 10000 /var/log/system.log | grep "syslog(3)"
$ 
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 4

这取决于您记录消息的方式。正如Daniel Walsh
在“处理容器中日志记录的更好方法”中提到的:

标准 Docker 容器的一个大问题是,默认情况下,任何将消息写入系统日志或直接写入日志的服务都会被删除。
Docker 不会记录任何日志,除非消息写入 STDIN/STDERR。容器内部没有运行日志服务来捕获这些消息。

因此,一个简单的回显应该最终出现在系统日志中,如图所示chentex/random-logger。

从Docker for Mac/日志和故障排除中,您可以直接检查以下内容后是否看到任何日志docker run:

要在命令行查看 Docker for Mac 日志,请在终端窗口或您喜欢的 shell 中键入此命令。

$ syslog -k Sender Docker
Run Code Online (Sandbox Code Playgroud)

2017年:

检查 的内容~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log。PR 11458中添加了 Syslog 驱动程序

2022 年:

布莱斯在评论中提到:

在 Docker Desktop for macOs 4.x 中,日志现在位于此处

$HOME/Library/Containers/com.docker.docker/Data/log/, 
# eg 
$HOME/Library/Containers/com.docker.docker/Data/log/vm/console.log
Run Code Online (Sandbox Code Playgroud)