2016-11-03 2 views
1

Noch neu bei Docker und versuchen, einen Jetty-Webservice in einem Container laufen zu lassen. Dies ist meine Docker-Datei zur ZeitDocker: Installiere Maven-Abhängigkeiten nur während der Build-Phase?

Rezept

FROM maven:3.3-jdk-8-alpine 

# Install packages 
# To find packages to install see - https://pkgs.alpinelinux.org/packages 
RUN apk add --no-cache curl tar bash wget apache-ant 
RUN apk info 

# Do any Maven configuration 
ENV MAVEN_HOME /usr/share/maven 
VOLUME "$USER_HOME_DIR/.m2" 
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2" 


# Copy over project source files to the /tmp folder 
COPY . /tmp/project 
WORKDIR /tmp/project 

# Preinstall any Maven depencencies 
RUN mvn install -pl '!deb' -DskipTests 

# Default command when running the docker image, can be overriden 
CMD cd webapp/ && mvn jetty:run 

Während des Docker Build angeben ich maven install alle Abhängigkeiten für das Projekt zu installieren und die Gläser für jedes Modul aus Quellen zu bauen.

aber wenn dann die Docker Container laufen, versucht es noch alle Abhängigkeiten zu installieren und schlägt dann fehl, weil es nicht meine api.jar Datei finden

Meine Projektstruktur ist wie so

Projektstruktur Service

  • api
  • lib
  • Webapp
  • pom.xml

Fehler

Die folgenden Artefakte konnte nicht aufgelöst werden: com.foo.service: Service-api: jar: 1,14-snapshot

Das Ausführen der gleichen Schritte außerhalb eines Containers funktioniert einwandfrei und der Bootssteg-Service beginnt in Ordnung. Irgendwelche Ideen wie zu beheben?

+0

Mögliche Duplikat [Sie alle Maven Abhängigkeiten nicht herunterladen auf einem Docker bauen] (http://stackoverflow.com/questions/38293073/do-not-download -all-maven-dependencies-on-a-docker-build) – nwinkler

+0

Möglicherweise auch von Interesse: http://stackoverflow.com/questions/39977955/how-to-mount-docker-volume-into-my-docker-project -using-compose – nwinkler

+0

Diese sind nicht nützlich, weil ich Abhängigkeiten während des Docker-Builds herunterladen möchte, aber ich möchte den gleichen Prozess nicht bei Docker ausführen – kaleeway

Antwort

3

SNAPSHOT-Abhängigkeiten werden regelmäßig von Maven auf Aktualisierungen überprüft - standardmäßig täglich. Aber Sie können dies in Ihrem settings.xml von Maven deaktivieren. Siehe https://stackoverflow.com/a/3942048/2235015 für eine Antwort in einem ähnlichen (aber invertierten) Fall und siehe http://maven.apache.org/ref/3.2.2/maven-settings/settings.html (Suche nach updatePolicy).

Beispiel Repository Einstellung in Ihrer settings.xml:

<repository> 
    <id>snapshots</id> 
    <url>http://host/nexus/repos/snapshots</url> 
    <snapshots> 
     <updatePolicy>never</updatePolicy> 
    </snapshots> 
    <releases> 
     <updatePolicy>never</updatePolicy> 
    </releases> 
</repository> 
Verwandte Themen