如何查询运行中Docker容器或服务的生效--log-opt配置?
如何查看Docker服务生效的
--log-opt配置 这个问题确实挺让人头疼的——明明用docker service update my_service --log-opt mode=non-blocking更新了日志配置,但常规的docker service inspect或docker container inspect好像找不到生效的参数。我给你几个可靠的方法:
1. 从服务的任务模板中查询
Docker服务的日志配置会存在服务的任务模板(TaskTemplate)里,你可以用jq工具直接提取这部分内容(如果没装jq也可以手动在inspect输出里找):
docker service inspect my_service | jq '.[0].Spec.TaskTemplate.ContainerSpec.LogConfig'
输出应该会包含你设置的mode=non-blocking参数,比如:
{ "Type": "json-file", "Options": { "mode": "non-blocking" } }
如果没有jq,也可以用grep配合--format参数简化输出:
docker service inspect --format '{{.Spec.TaskTemplate.ContainerSpec.LogConfig}}' my_service
2. 查询具体任务的运行时配置
服务的每个任务(task)会继承服务模板的配置,你可以先找到服务对应的任务ID,再查看任务的详细配置:
- 第一步,获取任务ID(用
--no-trunc避免ID被截断):
docker service ps my_service --no-trunc
- 第二步,用任务ID查询配置:
docker inspect <task-id>
在输出里找到Spec -> ContainerSpec -> LogConfig -> Options,这里就能看到生效的日志参数了。
3. 验证容器的实际日志行为(可选)
如果想确认配置真的生效了,可以测试容器的日志阻塞行为:比如往容器里快速写入大量日志,看容器会不会因为日志阻塞而挂掉——如果mode=non-blocking生效,容器会丢弃超出缓存的日志而不是停止。
另外要注意:如果你的服务在更新配置后没有滚动重启容器,旧容器还是会用原来的日志配置,只有新启动的容器才会应用新配置。可以用docker service update my_service --force强制滚动更新所有容器,确保配置生效。
内容的提问来源于stack exchange,提问作者Tomcat Engineering
相关产品推荐
相关产品推荐

