Pour les développeurs Java, suivre ma solution ci-dessous va fonctionner :
si vous avez essayé d'exécuter votre conteneur avec un Dockerfile comme ci-dessous
ENTRYPOINT ["/docker-entrypoint.sh"]
# does not matter your parameter $JAVA_OPTS wrapped as ${JAVA_OPTS}
CMD ["java", "$JAVA_OPTS", "-javaagent:/opt/newrelic/newrelic.jar", "-server", "-jar", "app.jar"]
avec un shell ENTRYPOINT script ci-dessous :
#!/bin/bash
set -e
source /work-dir/env.sh
exec "$@"
il va construire l'image correctement mais imprimer l'erreur ci-dessous pendant l'exécution du conteneur :
Error: Could not find or load main class $JAVA_OPTS
Caused by: java.lang.ClassNotFoundException: $JAVA_OPTS
Au lieu de cela, Java peut lire les paramètres de la ligne de commande soit par la ligne de commande soit par _JAVA_OPTIONS Cela signifie que nous pouvons transmettre les paramètres de ligne de commande souhaités par le biais de la variable d'environnement _JAVA_OPTIONS sans changer quoi que ce soit dans le Dockerfile, ainsi que pour lui permettre de démarrer en tant que processus parent du conteneur pour la signalisation valide de docker via exec "$@"
.
Celle ci-dessous est ma version finale de la Dockerfile
y docker-entrypoint.sh
des fichiers :
...
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["java", "-server", "-jar", "app.jar"]
#!/bin/bash
set -e
source /work-dir/env.sh
export _JAVA_OPTIONS="-XX:+PrintFlagsFinal"
exec "$@"
et après avoir construit votre image docker et essayé de l'exécuter, vous verrez les logs ci-dessous qui signifient que cela a bien fonctionné :
Picked up _JAVA_OPTIONS: -XX:+PrintFlagsFinal
[Global flags]
int ActiveProcessorCount = -1 {product} {default}
1 votes
Comment et quand définissez-vous
$PROJECTNAME
?0 votes
Au début de mon Dockerfile en utilisant ENV. J'ai également oublié de mentionner que si je supprime la ligne CMD du Dockerfile et que je lance ensuite le conteneur, je peux exécuter cette commande depuis l'intérieur du conteneur et le projet sera créé (ce qui signifie que la variable ENV est valide).
0 votes
De quel type de variable parlez-vous : variable de dockerfile ou variable environnementale (comme dans votre système d'exécution) ?