webentwicklung-frage-antwort-db.com.de

Docker Tomcat-Benutzerkonfiguration funktioniert nicht

Update: Bereinigung und direkte Anzeige des Problems und der Lösung.

PROBLEM:

Docker-Tomcat wurde ordnungsgemäß installiert und ausgeführt, mit Ausnahme des 403-Zugriffsfehlers in der Manager-App. Es scheint auch, dass mein Docker Tomcat meine Konfiguration von Tomcat-users.xml nicht finden kann.

LÖSUNG

Danke an Farhad und Sanket für die Antworten.

[Dateien]:

Dockerfile

FROM Tomcat:8.5.11
MAINTAINER Borgy Manotoy <[email protected]>

# 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-Benutzerkonfiguration (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>

Anwendungskontext (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 & BEFEHLE]:

  1. Docker-Image erstellen

    docker bauen -t Borgymanotoy/mein-Kater-Docker. 

  2. Führen Sie Image aus (my-Tomcat-Docker und setzen Sie den Port auf 8088).

    docker run --name mein-Tomcat-docker-container -p 8088: 8080 -it -d borgymanotoy/mein-Tomcat-docker 

  3. Gehen Sie zur Bash des Containers (um die Dateien innerhalb des Containers durch die Bash zu überprüfen)

    docker exec -it biyahe-Tomcat-docker-container bash 

9
Borgy Manotoy

Zuerst müssen Sie Ihre Anwendung im Container verfügbar machen, damit Sie sich über dockerhost/network mit ihr verbinden können.

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

Sie müssen 2 Dateien ändern, um vom Remote-Host aus auf die Mangaer-App zugreifen zu können. (Der Browser auf dem Docker Host wird als Remote betrachtet, nur Pakete, die auf einem Loopback von Containern empfangen werden, werden für Tomcat als lokal betrachtet.)

  1. /usr/local/Tomcat/webapps/manager/META-INF/context.xml Beachten Sie den kommentierten Abschnitt.

    <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" />
    -->
    

Bitte beachten Sie den kommentierten Abschnitt.

  1. /usr/local/Tomcat/conf/Tomcat-users.xml wie in der Frage angegeben.

    <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" />
    

Um Änderungen an den Dateien im Container vorzunehmen, können Sie versuchen, ein eigenes Image zu erstellen. Ich empfehle jedoch, Docker-Volumes oder Mounts zu binden.

Stellen Sie außerdem sicher, dass Sie den Container neu starten, damit die Änderungen wirksam werden.

9
Farhad Farahi

Bitte geben Sie den Port an, wenn Sie einen docker run-ähnlichen Code verwenden (ich glaube mine/Tomcat-version ist Ihr Bildname) 

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

dann auf die Manager-Seite zugreifen mit,

http://<ipaddress>:8000/manager/html

Um die Host-IP-Adresse im Docker zu erhalten, müssen Sie docker-machine ip ausführen.

Zusatzinfo: Sie können auch mit dem folgenden Befehl in den Container gelangen.

docker exec -it MyContainerName bash , wenn Sie verschiedene Dinge wie Tomcat-Protokolle, Conf-Dateien usw. überprüfen möchten. 

1
ProgrammerBoy

Obwohl dies ziemlich spät ist, wollte ich meine 2 Cent verlassen.

Ich habe diese Lösung auf die nächste Stufe gebracht, indem ich ein Beispiel für ein kontinuierliches Integrationssystem aufgesetzt habe, das Warnungen für den Docker Tomcat bereitstellt, indem einfach mvn clean install über das Projekt IDE ausgeführt wird, während der Docker Tomcat-Container ausgeführt wird.

  • Dadurch wird das Problem gelöst, dass der Tomcat-Container jedes Mal neu gestartet werden muss, wenn ein neuer Build verfügbar ist. Nutzt die automatische Bereitstellung von Tomcat
  • Verwendet ein freigegebenes Volume, sodass Sie mehrere Wars auf dem freigegebenen Volume bereitstellen können, und ein Skript erfasst Ihre Wars und stellt sie in Tomcat-Webanwendungen bereit 
  • Kommt mit einem Standardbenutzer "admin", um auf die Manager-GUI zuzugreifen.
  • Verfügbar im öffentlichen Docker-Repo: docker run -p 8080:8080 -d --name tom -v <YOUR_VOLUME>:/usr/local/stagingwebapps wintersoldier/Tomcat_ci:1.0
  • Hält alle Kriegsdateien ab, die auf dem freigegebenen Datenträger abgelegt wurden, und stellt sie sofort auf dem Tomcat-Server bereit, mit einer Option, sie auch über die GUI bereitzustellen
  • Hier ist eine Beispielanwendung mit erforderlichen Maven-Änderungen und Docker-Dateien zum Erkunden
0
Winter Soldier