使用Docker作为Jenkins代理时目录列表出现异常行为的问题咨询
使用Docker作为Jenkins代理时目录列表出现异常行为的问题咨询
嘿,这个问题确实容易让人摸不着头脑,我刚接触Jenkins Docker Agent的时候也困惑过!其实核心是你误解了命令的执行环境,还有Jenkins Docker插件的默认行为,我给你拆解一下:
首先明确一个关键事实:
所有sh步骤100%都是在你指定的tomcat:jre21-temurin容器内执行的,没有任何命令跑到Jenkins主机上去——这是你疑惑的根源。
为什么ls和pwd看起来像是主机的workspace内容?
Jenkins的Docker Agent插件有个默认操作:
- 它会把Jenkins主机上的当前项目工作目录(比如
/var/jenkins_home/workspace/你的流水线名称)挂载到容器内的相同路径; - 同时自动把容器的默认工作目录切换到这个挂载路径。
所以当你执行不带路径的ls时,你看的是容器内这个挂载点的内容(也就是主机workspace的文件);pwd输出的是容器内的挂载路径,而不是Tomcat容器本身的默认目录(比如/)。
为什么ls /usr/local这类命令又显示容器内的内容?
因为这些命令指定了绝对路径,直接访问容器自身的文件系统,完全不受当前工作目录(挂载点)的影响,所以能看到Tomcat容器自带的目录和文件。
给你个验证小技巧:
你可以在steps里加一行sh 'mount',就能看到Jenkins工作目录挂载到容器的具体记录;或者执行sh 'ls /',就能同时看到容器根目录的原生内容,以及那个挂载进来的workspace目录啦。
备注:内容来源于stack exchange,提问作者rebel_roar
相关产品推荐
相关产品推荐

