0

JHipster を使用して springboot アプリケーションを作成していますが、JIB を使用して docker コンテナーを作成していると思います。すべて正常に動作しますが、スタートアップ スクリプトの実行や追加の実行についてはどうでしょうか。私の場合、適切にインストールされたサービスを起動する必要があります

CMD service pcscd start 

画像だけを入れた場合、これは起動時に発生しません。これを Kubernetes の POD 定義に追加すると、springboot アプリケーションの起動が消去され、コマンドを実行したかっただけのように終了します。最初に pcscd サービスを起動し、次に spring boot アプリを起動する起動スクリプトを実行するにはどうすればよいですか?

4

1 に答える 1

2

主にシェルを使用して複数のコマンドを実行するには、複数の方法があります。

  1. の「シェル形式」を使用してコマンドを実行しますENTRYPOINT。(ただし、Dockerfile参照では以下の「exec 形式」を優先します。) 舞台裏で、この「シェル形式」は実際にシェル バイナリ ( など/bin/sh) を実行し、シェルに「スクリプト」 (ここではecho one && echo two) を解釈させます。
FROM ubuntu:bionic
ENTRYPOINT echo one && echo two
  1. の「exec 形式」を使用してコマンドを実行しますENTRYPOINT。この場合、シェル バイナリが直接呼び出されます。
FROM ubuntu:bionic
ENTRYPOINT ["/bin/sh", "-c", "echo one && echo two"]
  1. コマンドが複雑になる場合は、それらをファイルに入れることを検討してください。シェル バイナリ (以下のファイルの上部に示され#/bin/shているように) がスクリプト ファイルの内容を解釈するという点で、上記と実際には違いはありません。
echo -e '#/bin/sh'"\necho one && echo two" > my-entrypoint.sh
FROM ubuntu:bionic
COPY my-entrypoint.sh /
RUN chmod +x /my-entrypoint.sh
ENTRYPOINT /my-entrypoint.sh
  1. 上記と同様ですが、「exec フォーム」を使用します。
ENTRYPOINT ["/bin/sh", "-c", "/my-entrypoint.sh"]

ENTRYPOINT(参考までに、 orを使用して組み合わせることができますがCMD、複数のコマンドを実行する場合ENTRYPOINTは十分な場合が多いため、それには触れません。参照を確認して、Dockerfile方法ENTRYPOINTCMD相互作用を確認できます。)

Jib の場合、<container><entrypoint>/を使用container.entrypointしてイメージ エントリポイントをカスタマイズできます。( MavenGradleの参照を確認してください。) また、<extraDirectories>機能 ( Maven / Gradle ) を使用して、シェル スクリプトを含む任意のファイルを提供できます。さらに、たとえば、シェル スクリプトに実行可能なビットを与えるために<extraDirectories>使用できます。<permissions>

また、Jib が使用するデフォルトの Java ベース イメージには/bin/shバイナリ (シェル) がないため、シェルを持つ別のベース イメージを使用する必要があることに注意してください。

最後に、コンテナー イメージに対して複数のコマンドを実行する方法を説明しているだけであることに注意してください。これは、Kubernetes (または任意の運用環境) で堅牢で回復力のある方法でサービスを実行するための理想的な方法であるとは限りません。

于 2019-11-05T16:36:07.197 に答える