如何使用oc命令指定访问Pod内非默认的应用容器获取日志
解决方法
1. 先确认业务容器的名称
执行以下命令查看指定Pod下的所有容器名称:oc get pod <Pod名称> -n <项目命名空间> -o jsonpath='{.spec.containers[*].name}'
返回结果会包含nginx-jwt-forwarder和业务应用容器名,记下业务容器的名称,下文统一用<业务容器名>指代。
2. 执行正确的日志拉取命令
你之前的命令存在两个问题:未指定执行容器、oc exec参数里直接填写本地路径会被识别为容器内路径,可选择两种方案实现需求:
方案1:使用oc cp直接拉取日志文件(更推荐)
oc cp -c <业务容器名> <Pod名称>:<容器内server.log所在目录>/server.log <本地存储路径>/server.log -n <项目命名空间>
示例:oc cp -c jboss-app my-pod-123:/opt/jboss/standalone/log/server.log C:/temp/server.log -n prod-project
方案2:使用oc exec结合输出重定向获取日志
oc exec -c <业务容器名> <Pod名称> -n <项目命名空间> -- cat <容器内server.log所在目录>/server.log > <本地存储路径>/server.log
核心参数说明:
-c <容器名>:明确指定命令执行的目标容器,不会默认使用nginx转发容器--:分隔oc命令参数和容器内要执行的命令参数,避免参数解析冲突
你收到的报错中两个路径不存在的原因分别为:
- 默认进入了nginx容器,该容器内不存在jboss的日志路径
- 你把本地路径
c:/temp/server.log写在了oc exec的参数里,被oc识别为容器内路径,nginx容器内不存在该路径
内容的提问来源于stack exchange,提问作者Tommy Wy
相关产品推荐
相关产品推荐

