2017-08-18 11 views
0

J'essaie d'utiliser le SBT natif emballeur pour produire une image Docker de mon application de jeu de Scala, j'ai suivi les étapes décrites à http://www.scala-sbt.org/sbt-native-packager/formats/docker.htmljeu SBT-native-emballeur scala dockerfile ne fonctionne pas avec config par défaut

Ceci est ma configuration:

sur mon plugins.sbt j'ai ajouté la dépendance pour SBT emballeur native:

// SBT Native 
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.1") 

sur mon build.sbt J'ai ajouté les plug-ins pour Universal et Docker:

.enablePlugins(PlayScala, JavaAppPackaging) 

J'ai aussi ajouté quelques propriétés supplémentaires:

javaOptions in Universal ++= Seq(
    // JVM memory tuning 
    "-J-Xmx1024m", 
    "-J-Xms512m", 

    // Since play uses separate pidfile we have to provide it with a proper path 
    // name of the pid file must be play.pid 
    s"-Dpidfile.path=/var/run/${packageName.value}/play.pid", 

    // Use separate configuration file for production environment 
    s"-Dconfig.file=/usr/share/${packageName.value}/conf/production.conf", 

    // Use separate logger configuration file for production environment 
    s"-Dlogger.file=/usr/share/${packageName.value}/conf/logback.xml" 
) 

// exposing the play ports 
dockerExposedPorts in Docker := Seq(9000, 9443) 

Puis je produis l'image docker à l'aide du plug-in et SBT CLI:

docker:publishLocal 

le dockerfile est généré à ./target/docker/ Dockerfile

quand je connaissance du dossier que je vois:

FROM openjdk:latest 
WORKDIR /opt/docker 
ADD opt /opt 
RUN ["chown", "-R", "daemon:daemon", "."] 
USER daemon 
ENTRYPOINT ["bin/root"] 
CMD [] 

qui ne semble pas contenir toutes les mesures nécessaires pour exécuter l'application, quand je l'utilise docker build . je reçois:

java.nio.file.NoSuchFileException:/var/run/root/jeu. pid

il semble que le Dockerfile manque quelques étapes où il devrait mKDIR /var/run/{APP_NAME}/ (* création du dossier intérieur instance de conteneur docker)

et chown ce dossier pour que le jeu pour créer le P Fichier ID.

comment réparer l'erreur ci-dessus?

Répondre

0

Quel est le message d'erreur lors du démarrage de l'image du docker et comment le démarrer?

Ensuite, il y a quelques choses notables.

navires de jeu avec-emballeur natif

Vous ne devriez pas avoir à ajouter un plugin, mais seulement configurer docker choses pertinentes. Vous avez déjà lié la documentation correcte pour le package format (docker).

Archétypes Vs Formats

Votre configuration ne fonctionnera pas sans le plug-in de lecture. Jetez un oeil à http://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/index.html qui explique comment configurer une construction d'application simple.

Je vous recommande également de lire le format et la section Archétypes ici: http://www.scala-sbt.org/sbt-native-packager/introduction.html#archetype-plugins

docker natif construire

natif-emballeur génère actuellement deux fichiers docker, ce qui est source de confusion et non pertinente. Désolé pour cette confusion. Nous prévoyons de supprimer le fichier docker redondant. Simplement aller un niveau plus profond et lancer la commande de construction de docker.

Espoir qui aide, Muki

+0

merci pour l'info supplémentaire. J'ai passé en revue vos liens et j'ai eu un problème que mon application de jeu ne fonctionne pas hors de la boîte, j'ai ajouté quelques détails ci-dessus, et suivi vos suggestions, il semble que l'image résultante de sbt-native-packager manque l'étape où il crée le dossier/var/run/{app_name}/(fichier PID) dois-je ajouter ces étapes en tant que champs personnalisés dans mon build.sbt? – guilhebl

+0

le Dockerfile essaye de créer un dossier /var/run/${packageName.value}/ et obtient l'autorisation refusée, donc je crois qu'il devrait fonctionner en tant que root? Des suggestions pour les problèmes ci-dessus? Merci. – guilhebl

+0

Vous pouvez désactiver le fichier pid en le définissant sur '/ dev/null'. C'est documenté dans l'application de jeu. Cela n'a aucun sens d'utiliser un fichier pid avec docker. – Muki