Docker容器中Tomcat缺失manager应用致Jenkins自动部署失败的问题咨询
解决Docker Tomcat无Manager应用导致Jenkins部署失败的问题
你碰到的这个问题其实挺典型的——官方Tomcat镜像确实调整了默认配置,现在默认不再自动启用manager这类管理应用了,这也是你容器里webapps目录为空的原因。
为什么默认没有Manager应用?
为了实现镜像轻量化,官方Tomcat镜像(从Tomcat 8.5/9.0的部分版本开始)把manager、host-manager这类管理类应用从webapps目录移到了webapps.dist目录下。默认启动容器时,webapps是空目录,自然访问不到/manager/text/list这类接口。
你需要手动配置Manager应用,具体步骤如下:
方法1:临时启动容器时自动复制Manager应用
如果只是临时测试,可以在启动命令里添加复制操作,让容器启动时自动把Manager应用从webapps.dist复制到webapps:
docker run --rm --name tomcat tomcat sh -c "cp -r /usr/local/tomcat/webapps.dist/manager /usr/local/tomcat/webapps/ && catalina.sh run"
方法2:自定义镜像,预配置Manager(推荐用于生产/长期使用)
这种方式更稳定,还能顺便配置好Jenkins访问需要的权限:
- 创建
Dockerfile:
FROM tomcat:latest # 复制Manager应用到webapps目录 RUN cp -r /usr/local/tomcat/webapps.dist/manager /usr/local/tomcat/webapps/ # 替换Tomcat用户配置文件,添加有manager权限的用户 COPY tomcat-users.xml /usr/local/tomcat/conf/
- 创建
tomcat-users.xml文件,添加具备manager-script角色的用户(Jenkins部署需要这个权限):
<?xml version="1.0" encoding="UTF-8"?> <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <user username="jenkins" password="your-secure-password" roles="manager-script"/> </tomcat-users>
- 构建自定义镜像并启动:
docker build -t my-tomcat . docker run --rm --name tomcat my-tomcat
额外提醒
除了复制Manager应用,一定要配置具备manager-script角色的用户,否则Jenkins访问/manager/text接口时会返回401权限错误,依然无法完成部署。
内容的提问来源于stack exchange,提问作者Piotrek
相关产品推荐
相关产品推荐

