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]:
Docker-Image erstellen
docker bauen -t Borgymanotoy/mein-Kater-Docker.
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
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
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.)
/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.
/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.
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.
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.
docker run -p 8080:8080 -d --name tom -v <YOUR_VOLUME>:/usr/local/stagingwebapps wintersoldier/Tomcat_ci:1.0