Docker Tomcat用户配置无法正常工作

时间:2017-03-09 10:00:17

标签: docker dockerfile tomcat8

更新:清理并直接指出问题和解决方案。

问题:

Docker-tomcat已正确安装并运行,但Manager App中的403 Access错误除外。我的docker tomcat似乎也找不到我的tomcat-users.xml配置。

感谢FarhadSanket的答案。

[文件]:

Dockerfile

FROM tomcat:8.5.11
MAINTAINER Borgy Manotoy <borgymanotoy@ujeaze.com>

# Update Apt and then install Nano editor (RUN can be removed)
RUN apt-get update && apt-get install -y \
    nano \
&& mkdir -p /usr/local/tomcat/conf

# Copy configurations (Tomcat users, Manager app)
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY context.xml /usr/local/tomcat/webapps/manager/META-INF/

Tomcat用户配置(conf / tomcat-users.xml)

<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">
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <user username="admin" password="password" roles="manager-gui,manager-script" />
</tomcat-users>

应用程序上下文(webapps / manager / META-INF / context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
  <!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  -->
</Context>

[STEPS&amp; COMMANDS]:

  1. 构建Docker镜像

    docker build -t borgymanotoy / my-tomcat-docker。

  2. 运行Image(my-tomcat-docker并将端口设置为8088)

    docker run --name my-tomcat-docker-container -p 8088:8080 -it -d borgymanotoy / my-tomcat-docker

  3. 转到容器的bash(通过bash检查容器内的文件)

    docker exec -it biyahe-tomcat-docker-container bash

3 个答案:

答案 0 :(得分:10)

首先,您需要在容器中公开您的应用程序,以便可以从dockerhost / network连接到它。

docker run -d -p 8000:8080 tomcat:8.5.11-jre8

您需要更改2个文件才能从远程主机访问漫画应用程序。 (Docker主机上的浏览器被认为是远程的,只有在容器环回上接收的数据包才被认为是tomcat本地的)

  1. /usr/local/tomcat/webapps/manager/META-INF/context.xml请注意评论部分。

    <Context antiResourceLocking="false" privileged="true" >
    <!--
         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    -->
    
  2. 请注意评论部分。

      您在问题中说明了
    1. /usr/local/tomcat/conf/tomcat-users.xml

      <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">
      <role rolename="manager-gui"/>
      <role rolename="manager-script"/>
      <user username="admin" password="password" roles="manager-gui,manager-script" />
      

    2. 为了更改容器中的文件,您可以尝试构建自己的图像,但我建议使用docker volume或bind mounts。

      还要确保重新启动容器,以使更改生效。

答案 1 :(得分:1)

请在执行docker run时指定端口(我相信mine/tomcat-version是您的图片名称),

docker run -p 8000:8080 -it -d --name MyContainerName mine/tomcat-version

然后使用

访问经理页面
http://<ipaddress>:8000/manager/html

要使docker中的主机IP地址需要执行docker-machine ip

添加信息:您也可以使用以下命令

进入容器

docker exec -it MyContainerName bash 如果你想检查tomcat日志,配置文件等不同的东西。

答案 2 :(得分:0)

尽管已经很晚了,我还是想留下2美分。

我通过构建示例连续集成系统将解决方案提升到了一个新的水平,该系统只需通过项目IDE运行mvn clean install即可将战争部署到docker tomcat,同时运行docker tomcat容器。

  • 这解决了每次有新版本可用时都必须重新启动tomcat-container的问题。利用tomcat的自动部署功能
  • 使用共享卷,以便您可以将多个war部署到共享卷中,并且脚本将拾取您的war并将其部署到tomcat webapps
  • 带有标准用户“ admin”,以访问管理器GUI。
  • 可在公共docker存储库上使用:docker run -p 8080:8080 -d --name tom -v <YOUR_VOLUME>:/usr/local/stagingwebapps wintersoldier/tomcat_ci:1.0
  • 拾起掉落到共享卷中的所有war文件,并立即将它们部署到tomcat服务器,并可以选择通过GUI进行部署
  • 这里是sample application,其中包含必需的maven更改和docker文件以供浏览