web-dev-qa-db-ja.com

Dockerイメージでjarファイルを実行する

JavaでDockerイメージを作成し、jarファイルをイメージにコピーしています。私のDockerfileは:

FROM anapsix/Alpine-Java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
RUN Java -jar /home/testprj-1.0-SNAPSHOT.j

次のコマンドを実行した後:

docker build -t imageName.

コンソールには、アプリケーションからの出力が表示され、すべて問題ありません。しかし、イメージを停止すると、イメージを再度実行する方法がわかりません。次のコマンドを実行すると:

docker run -i -t imageName Java -jar /home/testprj-1.0-SNAPSHOT.jar

アプリケーションは再び実行されますが、私のDockerfileにはすでにこのコマンドが記述されています。このコマンドなしでイメージを実行し、アプリケーションを自動的に実行するにはどうすればよいですか?

35

画像とコンテナには違いがあります。

  • イメージは1回ビルドされます
  • 画像からコンテナを開始できます

あなたの場合:

画像を変更します。

FROM anapsix/Alpine-Java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
CMD ["Java","-jar","/home/testprj-1.0-SNAPSHOT.jar"]

イメージを構築します。

docker build -t imageName .

次に、コンテナ内でプログラムを呼び出します。

docker run --name myProgram imageName

次に、コンテナを再起動してプログラムを再起動します。

docker restart myProgram

あなたのプログラムは変わりましたか?イメージを再構築してください!:

docker rmi imageName
docker build -t imageName .
65
blacklabelops

これはあなたが尋ねたものとはまったく異なるかもしれませんが、justJARを実行する必要がある場合(それはより大きなカスタムコンテナの一部であるのではなく)ボリューム/フォルダーをJARにマッピングし、標準のアップストリームイメージを使用して実行するこのアプローチが気に入っています。

docker run --rm -it -v /home/me/folderHoldingJar:/home:Z Java:latest /bin/bash -c '/usr/bin/Java -jar /home/theJarFile.jar'

さらに、JARがGUIを表示する必要がある場合は 追加の引数 を追加できます。

0
CrazyPyro