2016-09-22 1 views
1

Ich habe erfolgreich mein Docker Bild für eine play-java gebaut. Beim Versuch, einen Container mit docker run -p 0.0.0.0:9000:9000 egima/play activator run zu erzeugen, kann sbt jedoch keine bestimmte Abhängigkeit herunterladen. Das Protokoll sieht wie folgt aus:sbt fehlgeschlagen Download im laufenden Spiel Docker Container

==== Maven2 Local: tried 
    file:/root/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0.jar 
==== Apache Repository: tried https://repository.apache.org/content/repositories/releases/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0.jar[0m 
    :::::::::::::::::::::::::::::::::::::::::::::: 
    ::    FAILED DOWNLOADS   :: 
    ::^see resolution messages for details^:: 
    :::::::::::::::::::::::::::::::::::::::::::::: 
    :: org.sonatype.sisu#sisu-guice;3.1.0!sisu-guice.jar 
    :::::::::::::::::::::::::::::::::::::::::::::: 

Hinweis, die die tried Repositories. Ich habe all the different variants gefolgt, um die local Mavenrepos auf meiner Maschine einzuschließen, bestätige ich von den Protokollen, die sbt, entsprechend, was ich in den lokalen maven Repos aber kein Glück angegeben habe.

Meine Resolvern sowohl in build.sbt und /project/plugins.sbt:

resolvers ++=Seq(
    Resolver.sonatypeRepo("public"), 
    Resolver.mavenLocal, 
    "Apache Repository" at "https://repository.apache.org/content/repositories/releases/" 
    ) 

Ich habe auch meine lokale Maven-Repo die fehlende Abhängigkeit besteht zu gewährleisten. Was fehlt?

+0

/root/.m2? Warum das root-Konto verwenden? – VonC

+0

@VonC, dieser Pfad wird automatisch von 'sbt' von' Resolver.mavenLocal' konvertiert. Ich habe auch die Wege ausprobiert, die für andere in der verlinkten Frage funktionierten, immer noch kein Glück. – egima

+0

Sicher: es wird in $ HOME/.m2 aufgelöst. Ist dieser Ordner leer? Sollte es nicht einige Elemente enthalten? Haben Sie einen lokalen Ordner .m2, den Sie teilen sollten (-v)? – VonC

Antwort

1

VonC vorgeschlagen im Abschnitt Kommentare den folgenden Schritt in Dockerfile hinzuzufügen:

RUN ln -s /C/Users/me/.m2 /root/.m2 

Ich glaube, dieser Befehl eine weiche Verbindung zwischen $MAVEN_HOME auf meiner Host-Maschine und die Auflösung Pfad festlegen sollte Resolver.mavenLocal, die /root/.m2 löst.

Dies sollte die Lösung sein. Nach dem Versuch erkannte ich jedoch, dass der gemeinsame Pfad /c/Users/me (unsichtbar mit Großbuchstaben C, weiß nicht warum) innerhalb der VM sichtbar ist, aber in einem Container unsichtbar ist. So einschließlich dieser Linie innerhalb Dockerfile würde mir geben:

ln:cannot access /c/Users/me/.m2: No such file or directory 

Zusätzlich sogar RUN ls /root Durchführung würde mir einen ähnlichen Fehler den Pfad Ziel zu Sinn noch nicht zu diesem Zeitpunkt existieren.

Meine eigene Schlussfolgerung ist, dass die Lösung darin liegt, den Host-Pfad auf den Zielpfad mit jeder verfügbaren Methode zu mounten, was ich denke, ist ein gut diskutiertes Thema in diesem Forum. Für meine besondere Situation , die eine Montierung während docker run mit der -v Fahne durchführt, löste das Problem.

Dies ist der genaue Befehl, den ich verwenden:

docker run -v /c/Users/me/.m2:/root/.m2 -p 0.0.0.0:9000:9000 egima/play activator run 

ich a complete blog post über seine diejenigen geschrieben habe, die mehr Informationen benötigen.

+0

Schön gemacht. +1 – VonC

Verwandte Themen