Open ohacy opened 2 years ago
Bonjour,
Voici mon DockerFile fonctionnel : FROM maven:3-jdk-11 AS builder WORKDIR /build COPY pom.xml /build/ COPY src /build/src COPY frontend /build/frontend RUN --mount=type=cache,target=/root/.m2/repository mvn -Pmaven-frontend -Pproduction --batch-mode --errors --show-version package
FROM openjdk:11-jdk-slim VOLUME /tmp COPY --from=builder /build/target/webapp/WEB-INF/lib /app/lib COPY --from=builder /build/target/webapp/META-INF /app/META-INF COPY --from=builder /build/target/webapp/WEB-INF/classes /app ENTRYPOINT ["java","-cp","app:app/lib/*","fr.univlorraine.mondossierweb.Application"]
Mais j'utilise docker-compose après ainsi : version: '3' services: esup-mdw: build: . image: unimes/esup-mdw:latest container_name: esup-mdw ports:
880:8080
mysql: image: mariadb container_name: mariadb_mdw volumes:
Bonjour,
toutes mes excuses car le dockerfile n'étant pas fonctionnel, il n'aurait pas dû être publié sur git, ni livré. C'est un reliquat et une base de travail pour une future version.
Cordialement
Bonjour,
Je rebondis sur ce sujet quelques années après car j'essaie de mettre en place "mondossierweb" au sein de notre établissement.
Je ne suis pas très doué avec Docker mais j'ai essayé de m'inspirer de vos échanges afin d'avoir un Dockerfile fonctionnel:
# Stage that builds the application, a prerequisite for the running stage
FROM maven:3.8.5-openjdk-17-slim AS build
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash -
RUN apt-get update -qq && apt-get install -qq --no-install-recommends nodejs
# Stop running as root at this point
RUN useradd -m myuser
WORKDIR /usr/src/app/
RUN chown myuser:myuser /usr/src/app/
USER myuser
# Copy pom.xml and prefetch dependencies so a repeated build can continue from the next step with existing dependencies
COPY --chown=myuser pom.xml ./
RUN mvn dependency:go-offline -Pproduction
# Copy all needed project files to a folder
COPY --chown=myuser:myuser src src
COPY --chown=myuser:myuser frontend frontend
COPY --chown=myuser:myuser package.json ./
# Build the production package, assuming that we validated the version before so no need for running tests again
RUN mvn clean package -DskipTests -Pproduction
# Running stage: the part that is used for running the application
FROM tomcat:jdk17
COPY --from=build /usr/src/app/target/*.war /usr/local/tomcat/webapps/ROOT.war
EXPOSE 8080
WORKDIR /usr/app/
ENTRYPOINT ["catalina.sh", "run"]
L'image a été créée avec succès.
J'ai ajouté la start-class ci-dessous dans le fichier "pom.xml" car j'avais une erreur par la suite:
<properties>
<start-class>fr.univlorraine.mondossierweb.Application</start-class>
<revision>2.2.1</revision>
<sha1></sha1>
<changelist>-SNAPSHOT</changelist>
<java.version>17</java.version>
<!-- <vaadin.version>24.0.5</vaadin.version> -->
<vaadin.version>24.3.3</vaadin.version>
<gson-fire-version>1.8.4</gson-fire-version>
<swagger-core-version>1.5.24</swagger-core-version>
<okhttp-version>4.9.3</okhttp-version>
<gson-version>2.8.6</gson-version>
<commons-lang3-version>3.10</commons-lang3-version>
<javax-annotation-version>1.3.2</javax-annotation-version>
<h2.version>2.1.210</h2.version>
<sonar.qualitygate.wait>true</sonar.qualitygate.wait>
<skipITs>false</skipITs>
<flyway.version>8.5.13</flyway.version>
</properties>
J'ai ensuite utilisé le docker-compose ci-dessous:
services:
mariadb:
image: mariadb:10.8.2
restart: always
container_name: mariadb
volumes:
- /home/thierry/docker/mariadb:/var/lib/mysql
environment:
- MARIADB_ROOT_PASSWORD=mypass
- MARIADB_DATABASE=mdw
- MARIADB_ROOT_HOST=%
networks:
- app
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: phpmyadmin
ports:
- 8000:80
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mariadb
depends_on:
- mariadb
networks:
- app
mdw-pegase:
image: esup-mdw:latest
container_name: mdw-pegase
ports:
- 8080:8080
volumes:
- /home/thierry/docker/esup-mdw-pegase:/config
environment:
JAVA_OPTS: -Dspring.config.location=file:/config/application.properties
depends_on:
- mariadb
networks:
- app
networks:
app:
driver: bridge
J'ai ensuite déposé le fichier "application.properties" dans le répertoire "config" avec la chaine de connexion ci-dessous:
# MySQL
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://mariadb:3306/mdw?serverTimezone=Europe/Paris
spring.datasource.username = root
spring.datasource.password = mypass
Et c'est donc au moment du lancement du container "mdw-pegase" que les ennuies comment avec cette erreur:
java.sql.SQLException: Access denied for user 'root'@'172.18.0.4' (using password: YES)
J'arrive bien à me connecter sur la BdD MariaDB avec root/mypass depuis PHPMyAdmin et le root semble avoir les accès requis:
Est-ce que quelqu'un aurait déjà rencontré ce problème svp?
Merci par avance pour vos réponses, Thierry
Bonjour,
Tout me semble correct. Pouvez-vous essayer de supprimer le networks (il me semble que ça fonctionnait sur mon Docker en local sans cela) ?
Cordialement
Bonjour,
Après m'être acharné sur MariaDB, j'ai tout recommencé pas à pas et, en particulier, j'ai refait un fichier "application.properties" contenant les mêmes informations que le premier et cela a fonctionné.
En conclusion, j'avais dû ajouter un caractère spécial pour le mot de passe "root" dans le fichier ...
Je suis bien redirigé vers l'URL du CAS qui n'est pas encore configuré. Bref, je ne suis pas sorti de l'auberge ;)
Merci beaucoup pour votre réponse ! Thierry
Bonjour,
De rien.
Si nécessaire, vous pouvez essayer la dernière version du docker-compose.yml : https://github.com/EsupPortail/esup-mdw-pegase/blob/master/docker-compose.yml
Elle se base sur une image en 2.2.2
Il faut donc précédemment lancer un :
docker build -t esup-mdw-pegase:2.2.2 .
Puis, à la racine du projet, il faut créer un dossier ".docker". Dans ce répertoire créer 2 dossiers :
Dans le répertoire "esup-mdw-pegase" créer un fichier "application.properties" basé sur src/main/resources/application-example.properties
Indiquer la configuration à utiliser dans ce fichier. Pour la configuration de la bdd indiquer :
spring.datasource.url = jdbc:mysql://mariadb:3306/mdwpegase?serverTimezone=Europe/Paris
spring.datasource.username = root
spring.datasource.password = mypass
Enfin, lancer les conteneurs via la commande :
docker-compose -f docker-compose.yml -p mdw-pegase up -d
On accède à PhpMyAdmin via : http://localhost:8000/ On accède à MDW via : http://localhost:8080/
Si MDW ne démarre pas à cause d'une bdd non accessible,
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure ... Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure ... Caused by: java.net.ConnectException: Connection refused
c'est potentiellement dû au fait que la base n'a pas eu le temps de se créer avant que MDW se lance.
Il suffit donc de restart le conteneur de mdw-pegase
Cordialement
Bonjour,
Pour l'instant, je suis arrêté à la version 2.2.1 et cela fonctionne désormais parfaitement.
N'ayant pas accès pour l'instant au CAS, j'ai inclus dans le docker-compose l'image "casserver" d'Apereo et j'ai utilisé le "compte en dur" : casuser/Mellon avec une règle passante pour "esup-mdw-pegase"...
La prochaine étape sera le passage en environnement de production et je sens que cela ne va pas être une partie de plaisir.
En tout cas, merci pour votre travail et vos réponses.
Thierry
Bonjour, Dans le dockerfile, quel doit être la valeur de l'ENTRYPOINT ?
En laissant 'fr.univlorraine.blank.Application', la class n'est pas trouvée lors du run de l'image docker.
Si je remplace la classe par 'fr.univlorraine.mondossierweb.Application', java n'arrive pas à parser la class, voici les logs du run de l'image :
Le contenu du Dockerfile :
Merci par avance, Cyril Ohanian, PC-SCOL