2016-02-01 4 views
6

を構築します。このDockerfileでキャッシュジャーの依存関係は、私がこのDockerfileからドッカーイメージを構築しています

FROM maven:3.3.3-jdk-8 
MAINTAINER Mickael BARON 

ADD pom.xml /work/pom.xml 
WORKDIR /work 
RUN mvn dependency:go-offline --fail-never 

ADD ["src", "/work/src"] 
RUN ["mvn", "package"] 

を、私は私のJavaプロジェクトをパッケージ化する前に、依存関係をダウンロードするには強制します。したがって、srcディレクトリからファイルを変更するたびに依存関係を再ダウンロードする必要はありません。

しかし、この問題はMaven(ベースイメージ)のバージョンによって異なります。実際、依存関係はダウンロードされますが、コンテナの〜/ .m2ディレクトリには保存されません。空っぽです。したがって、いくつかのソースファイルを変更すると、すべての依存関係がredownloadされます。

しかし、私がMavenのバージョンをベースイメージ(例えばFROM maven:3.2.5-jdk-8)から変更すると、それは動作することに気付きました。

非常に奇妙なのですか?

答えて

1

私はそれがあるため、彼らは追加しました。このVOLUME命令のだ怖い:

https://github.com/carlossg/docker-maven/blame/8ab542b907e69c5269942bcc0915d8dffcc7e9fa/jdk-8/Dockerfile#L11

それは/root/.m2になり、ボリュームので、ビルド手順によって作られ、そのフォルダへの変更はにもたらされていませんビルドコンテナに従います。

+0

は '.m2'ボリュームせずに以前のバージョンを利用し始め、それが –

+0

に動作します。ここ' VOLUME'命令がどのように機能するかについて、様々な人々の苦情を追跡する問題だ:https://github.com/docker/docker/issues/3639#issuecomment-229490630 – sirlatrom

2

このトピックについての新しい命令があります: https://github.com/carlossg/docker-maven#packaging-a-local-repository-with-the-image

ザ・$ MAVEN_CONFIGのディレクトリ(デフォルトは/root/.m2に)何かがあるビルド時にDockerfileにそこにコピーして、ボリュームとして構成され、失われたそのために/ usr/share/maven/ref /ディレクトリが作成され、そこにあるものはコンテナ起動時に$ MAVEN_CONFIGにコピーされます。

事前にパッケージ化されたリポジトリを作成するには、必要な依存関係を持つpom.xmlを作成し、これをDockerfileで使用します。 /usr/share/maven/ref/settings-docker.xmlは、ローカルリポジトリを/ usr/share/maven/ref/repositoryに変更する設定ファイルですが、/ usrを使用する限り、独自の設定ファイルを使用できます/ share/maven/ref/repositoryをローカルリポジトリとして使用します。

+1

このソートは機能しますが、制限があります。その1つは、すべてのモジュールをダウンロードする前に依存関係を解決することです:[Go-offlineはマルチモジュールビルドでモジュールの依存関係が見つかりません。](https: //issues.apache.org/jira/browse/MDEP-516) –

+1

また、 'mvn install -Dmaven.repo.local =/usr/share/maven/ref/repository'のようなローカルリポジトリを指定する方が、 'mvn install'を実行しません。なぜこれが当てはまるのか分かりません。公式のdocker-mavenイメージがローカルリポジトリを設定しているようだからです。とにかく、それらは私の2セントです。 –

関連する問題