web-dev-qa-db-fra.com

La configuration des utilisateurs de Docker Tomcat ne fonctionne pas

Mise à jour: nettoyage et indique directement le problème et la solution.

PROBLEME:

Docker-Tomcat était correctement installé et en cours d'exécution, à l'exception de l'erreur 403 Access dans l'application Manager. Il semble également que mon docker Tomcat ne trouve pas ma configuration Tomcat-users.xml.

SOLUTION

Merci à Farhad et Sanket pour les réponses.

[Des dossiers]:

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/

Configuration des utilisateurs 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>

Contexte d'application (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>

[ÉTAPES ET COMMANDES]:

  1. Construire Docker Image

    docker construire -t borgymanotoy/mon-Tomcat-docker. 

  2. Exécuter l’image (my-Tomcat-docker et définir le port sur 8088)

    exécution du menu fixe --nom my-Tomcat-docker-container -p 8088: 8080 -it -d borgymanotoy/mon-Tomcat-docker 

  3. Aller à la bash du conteneur (pour vérifier les fichiers à l'intérieur du conteneur via bash)

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

9
Borgy Manotoy

Tout d'abord, vous devez exposer votre application dans le conteneur afin de pouvoir vous y connecter depuis dockerhost/network.

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

Vous devez modifier 2 fichiers pour pouvoir accéder à l'application mangaer à partir de l'hôte distant. (Le navigateur sur l'hôte Docker est considéré comme distant, seuls les paquets reçus dans une boucle de conteneur sont considérés comme locaux pour Tomcat)

  1. /usr/local/Tomcat/webapps/manager/META-INF/context.xml Notez la section commentée.

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

S'il vous plaît noter la section commentée.

  1. /usr/local/Tomcat/conf/Tomcat-users.xml comme vous l'avez dit dans la question.

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

Pour apporter des modifications aux fichiers du conteneur, vous pouvez essayer de créer votre propre image, mais je suggère d'utiliser des volumes de menu fixe ou des montages de liaison.

Assurez-vous également de redémarrer le conteneur pour que les modifications prennent effet.

9
Farhad Farahi

S'il vous plaît spécifier le port lorsque vous faites un docker run comme (je crois que mine/Tomcat-version est le nom de votre image), 

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

puis accédez à la page du gestionnaire en utilisant,

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

Pour obtenir l'adresse IP de l'hôte dans le menu fixe, vous devez exécuter docker-machine ip

Information additionnelle: Vous pouvez aussi entrer dans le conteneur en utilisant la commande ci-dessous,

docker exec -it MyContainerName bash si vous voulez vérifier différentes choses comme les journaux Tomcat, les fichiers de configuration, etc. 

1
ProgrammerBoy

Bien que ce soit assez tard, je voulais laisser mes 2 cents.

J'ai poussé cette solution au niveau supérieur en construisant un exemple de système d'intégration continue qui déploie des guerres sur le docker Tomcat en exécutant simplement mvn clean install via le projet IDE tout en faisant tourner le conteneur Tomcat docker.

  • Cela résout le problème de devoir redémarrer Tomcat-container chaque fois qu'une nouvelle version est disponible. Tire parti du déploiement automatique de Tomcat
  • Utilise un volume partagé pour que vous puissiez déployer plusieurs guerres dans le volume partagé et qu'un script enregistre vos guerres et les déploie sur des applications Web Tomcat. 
  • Livré avec un utilisateur standard 'admin' afin d'accéder à l'interface graphique du gestionnaire.
  • Disponible sur le référentiel de docker public: docker run -p 8080:8080 -d --name tom -v <YOUR_VOLUME>:/usr/local/stagingwebapps wintersoldier/Tomcat_ci:1.0
  • Récupère tous les fichiers de guerre déposés sur le volume partagé et les déploie instantanément sur le serveur Tomcat avec une option pour le déployer également via une interface graphique
  • Voici un exemple d'application avec les modifications maven requises et le fichier docker à explorer
0
Winter Soldier