不能在Docker容器中使用`systemd-cat`

我正在试图从我的容器内testing日志logging。 我希望这个工作在一个容器内,因为我们的构build系统在一个容器内运行。 我需要testing一个使用journalctl的脚本,我需要生成输出来parsing。 testing脚本需要在容器中运行。

我正在启动我的容器,如下所示:

 $ docker run --rm -it -v $(pwd):/home/edge -w /home/edge --log-driver=journald ubuntu /bin/bash root@78b56defde31:/home/edge# systemd-cat -t overflow ls /etc Failed to create stream fd: No such file or directory 

如果我在Debian主机上运行相同的命令,它可以工作:

 $ systemd-cat -t overflow ls /etc $ sudo journalctl | grep overflow Nov 01 08:09:53 nanode64 overflow[9037]: acpi Nov 01 08:09:53 nanode64 overflow[9037]: adduser.conf Nov 01 08:09:53 nanode64 overflow[9037]: adjtime Nov 01 08:09:53 nanode64 overflow[9037]: aliases Nov 01 08:09:53 nanode64 overflow[9037]: alternatives Nov 01 08:09:53 nanode64 overflow[9037]: anacrontab Nov 01 08:09:53 nanode64 overflow[9037]: apache2 Nov 01 08:09:53 nanode64 overflow[9037]: apg.conf Nov 01 08:09:53 nanode64 overflow[9037]: apm Nov 01 08:09:53 nanode64 overflow[9037]: apt ... 

除了bash之外,你的容器里面没有什么东西在运行。 容器内没有运行journald ,因此没有与systemd-cat进行通信的socket。 我怀疑你使用systemd-cat尝试可能源于对日志logging驱动程序工作原理的误解。

您正在使用Docker的日志logging驱动程序,这意味着您的容器输出到stdout / stderr的任何内容都将显示在您的主机日志中。 也就是说,如果你运行:

 docker run --rm -v $(pwd):/home/edge -w /home/edge --log-driver=journald ubuntu echo this is a test 

您可以在主持人看到:

 # journalctl -fl ... Nov 01 11:45:08 lkellogg-pc0dzzve dockerd[3736]: this is a test ... 

如果要使用-o verbose显示该消息,则会看到它实际上包含各种附加元数据,例如容器标识和容器名称:

 # journalctl -fl -o verbose MESSAGE='this is a test' Wed 2017-11-01 11:48:02.002147 EDT [s=9a99c0d26c3548a2ba6a6416bc37094c;i=15c9cce1;b=3f2b2d45203c485f9fa4373148c81925;m=219ad310e0d;t=55cedcbef19b3;x=6f1641d7b8ebf7ee] PRIORITY=6 _TRANSPORT=journal _UID=0 _GID=0 _SYSTEMD_SLICE=system.slice _BOOT_ID=3f2b2d45203c485f9fa4373148c81925 _MACHINE_ID=229916fba5b54252ad4d08efbc581213 _HOSTNAME=lkellogg-pc0dzzve _CAP_EFFECTIVE=3fffffffff _PID=3736 _COMM=dockerd _EXE=/usr/bin/dockerd _CMDLINE=/usr/bin/dockerd -G docker --dns 172.23.254.1 --log-driver journald -s overlay2 _SYSTEMD_CGROUP=/system.slice/docker.service _SYSTEMD_UNIT=docker.service _SELINUX_CONTEXT=system_u:system_r:unconfined_service_t:s0 MESSAGE=this is a test CONTAINER_ID=5d20a635fcff CONTAINER_ID_FULL=5d20a635fcff5c57212a65d5d0ebd77f3fd9529a8fd4fe6b718238877ecf5173 CONTAINER_NAME=optimistic_easley CONTAINER_TAG=5d20a635fcff _SOURCE_REALTIME_TIMESTAMP=1509551282002147