docker - 使用容器名称而不是容器 ID 保存 docker 容器日志
问题描述
使用默认的 json 文件日志记录驱动程序,有没有办法使用容器名称而不是容器 ID 来记录轮换 docker 容器日志?
日志文件名中的容器 ID 看起来不太可读,这是我想用容器名称保存日志的时候?
解决方案
可以使用日志选项配置引擎以在日志中包含标签:
# cat /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "com.docker.stack.namespace,com.docker.swarm.service.name,environment"
}
}
# docker run --label environment=dev busybox echo hello logs
hello logs
root@vm-11:/etc/docker# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9615c898c2d2 busybox "echo hello logs" 8 seconds ago Exited (0) 7 seconds ago eloquent_germain
# docker logs --details 961
environment=dev hello logs
# more /var/lib/docker/containers/9615c898c2d2aa7439581e08c2e685f154e4bf2bb9fd5ded0c384da3242c6c9e/9615c898c2d2aa7439581e08c2e685f154e4bf2bb9fd5ded0c384da3242c6c9e-json.log
{"log":"hello logs\n","stream":"stdout","attrs":{"environment":"dev"},"time":"2020-09-22T11:12:41.279155826Z"}
在对 daemon.json 进行更改后,您需要重新加载 docker 引擎,并且更改仅适用于新创建的容器。对于 systemd,重新加载是使用systemctl reload docker
.
要专门传递不是标签的容器名称,您可以传递“标签”设置:
# docker run --name test-log-opts --log-opt tag="{{.Name}}/{{.ID}}" busybox echo hello log opts
hello log opts
# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c201d0a2504a busybox "echo hello log opts" 6 seconds ago Exited (0) 5 seconds ago test-log-opts
# docker logs --details c20
tag=test-log-opts%2Fc201d0a2504a hello log opts
# more /var/lib/docker/containers/c201d0a2504addedb2b6785850a83e8931052d0d9778438e9dcc27391f45fec2/c201d0a2504addedb2b6785850a83e8931052d0d9778438e9dcc27391f45fec2-json.log
{"log":"hello log opts\n","stream":"stdout","attrs":{"tag":"test-log-opts/c201d0a2504a"},"time":"2020-09-22T11:15:26.998956544Z"}
更多细节:
推荐阅读
- c++ - MFC 中的动态透明几何
- python - 如何从 python 中的字符串中删除这些标签的内容?
- swift - 为什么画质这么差?(迅速)
- amazon-web-services - Appsync 解析器响应模板错误:无法转换为对象
- filenet-p8 - 在插件请求上收到 403 Forbidden 错误
- r - 如何在因变量具有不同时间值的 r 中进行回归?
- python - Pandas 被 try except 捕获后抛出解析错误,而 except 中的代码正在运行
- python - 在 TensorFlow 数据集中生成分层文本表示
- kubernetes - Kubernetes:hostPort 和 hostIp 是干什么用的?
- apache - Tomcat 服务器上的 HTTP 洪水导致问题