gpt4 book ai didi

docker - 无法在Docker容器中使用 `systemd-cat`

转载 作者:行者123 更新时间:2023-12-02 21:19:51 27 4
gpt4 key购买 nike

我正在尝试从容器内部测试到journald的日志记录。我希望它在容器内工作,因为我们的构建系统在容器内运行。我需要测试一个使用journalctl的脚本,并且需要生成用于解析的输出。测试脚本需要在容器中运行。

我正在这样启动我的容器:

$ 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通信的套接字。我怀疑您尝试使用systemd-cat的原因可能是对journald日志驱动程序如何工作的误解。

您正在使用Docker的journald日志记录驱动程序,这意味着您的容器输出到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显示该消息,则会看到该消息实际上包含各种其他元数据,例如容器ID和容器名称:
# 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

关于docker - 无法在Docker容器中使用 `systemd-cat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com