2016-04-25 12 views
1

Dockerを初めて使用しているので、非常に基本的な問題で苦労しています。Dockerhub自動ビルド用Dockerfileの作成

私はmavenプロジェクトを持っています。ローカル環境では、私はプロジェクトを実行するために行うすべては次のとおりです。

mvn clean package jetty:run 

私は今、githubのレポにリンクされている自動dockerhubのビルドのためにこれをパッケージ化しようとしています。ここで私が行った手順は以下のとおりです。

  1. は、以下のようにDockerfileを作成し、ベースフォルダ
  2. に追加して作成した
  3. をgithubのためにコードをコミットし、GitHubのレポにdockerhubにおける自動ビルドのレポをリンク。
  4. 私は、変更をコミットすると、私はそれがビルドをトリガーし、ビルドが成功すると見ることができる

を特定のブランチを指すように必要な変更を行い、Dockerfile。私はドッキングウィンドウのイメージを実行したときしかし、それは次のエラーで戻ってくる。ここで

docker: Error response from daemon: Container command 'mvn clean package jetty:run' not found or does not exist.. 

はフォルダ構造である:ここで

/Dockerfile 
/pom.xml 
/src/<folders that contain the code> 

は、私がDockerfileに持っているものです。

FROM maven:3.3.9-jdk-8 
CMD ["mvn clean package jetty:run"] 

私はコンテナにコードのコピーをフェッチしていると思います。しかし、それを行う最良の方法は何ですか?私はCOPYコマンドを試しましたが、動作させることができませんでした。

助けてください。

+0

このDockerfile https://github.com/carlossg/docker-maven/blob/b022df671b603a9100ed9e75803ae32f753826a4/jdk-8を試してみてください:あなたのケースで

CMD ["executable","param1","param2"] 

/onbuild/Dockerfileを削除しますが、 'ONBUILD'部分は削除してください。 –

答えて

0

maven Dockerfileには、docker buildの画像(ONBUILD directive)を使用してアクティブ化されたコピー指示が既に含まれています。
maven imageに基づいており、mvnは/usr/binになります。

あなたが原因ONBUILD指令の、described in the doc

FROM maven:3.2-jdk-7-onbuild 
CMD ["do-something-with-built-packages"] 
結果として得られるイメージがすでにソースをコピーしたとMVN、アプリケーションをコンパイルしたことを意味

Put this file in the root of your project, next to the pom.xml .

This image includes multiple ONBUILD triggers which should be all you need to bootstrap. The build will COPY . /usr/src/app and RUN mvn install .

として、Mavenのコマンドを行うことになってではなく、むしろ、 Dockerhub Automatedビルドの候補にはならない。

+0

あなたの言っていることを少し混乱させています。私のニーズは、アプリケーションを実行することです。それを実現させるために私は何をする必要がありますか?ローカル環境では、別のmvnプラグインを使用してクリーンスタートアップを取得しています。 Dockerでどのように達成できますか? ONBUILDイメージを使用しないでください。または、自分のONBUILDトリガーを書く必要があります。私はこれがちょっと基本的だと知っていますが、私はそれと闘っています。 – Ritwik

+0

@Ritwik私はアプリケーションがすでにドッカービルドでコンパイルされていることを意味します。これは、基本イメージがONBUILDディレクティブで行うことです。したがって、イメージは、アプリケーションを実行し、コンパイルしないコマンドをCMDとして持つ必要があります。 – VonC

+0

多分私はここで少し手を保持する必要があります。 '' maven:3.3-jdk-7-onbuild CMD ["mvn jetty:run"] 'ドッカーを実行すると、それでも私には同様のエラーがスローされます'docker:デーモンからのエラー応答:コンテナコマンド 'mvn jetty:run'が見つかりませんまたは存在しません。 – Ritwik

1

"mvn"はコマンドであり、 "clean"、 "package"、 "jetty:run"はそのパラメータです。 bashのようなシェルはそれらを自動的に分離します。ドッカーはしません。

CMD ["mvn clean package jetty:run"]は、 "/ usr/bin/mvn clean package jetty:run"のような名前のファイルをドッカーが検索できるようにします。

正しい形式は次のとおりです。

CMD ["/usr/bin/mvn", "clean", "package", "jetty:run"]