3

私は、Phusion のbaseimage上に構築された Docker コンテナに取り組んでいます。このコンテナは、多数のサービスをオンデマンドでのみ開始する必要があります。これらのサービスをサービスのままにしrunitたいのですが、起動時に自動的に開始しないようにしたいだけです。

ドキュメントに見られるように、サービス/etc/serviceの名前でフォルダーを作成することで、サービスを簡単に追加できます/etc/service/jboss。次に、サービスの起動を実行する、chmod +xそのサービス ディレクトリにファイルを作成する必要があります。run

これを実行して、起動時にサービスが開始されないようにするにはどうすればよいですか? 目標はまだ実行できるようにすることですsv start jbossが、起動時に開始しないようにすることです。

4

3 に答える 3

4

現在行っているように、サービスを/etc/sv/<SERVICE_NAME>/追加して実行可能ファイルを追加します。runサービスを実行する準備ができたら、シンボリック リンクを作成するだけで/etc/service、runit がサービスを取得して自動的に実行を開始します。

以下は、無効なサービスと有効なサービスを示す短い (最適化されていない) Dockerfile です。有効化されたサービスは、Docker の実行時に開始されます。無効化されたサービスは、シンボリック リンクが作成されるまで開始されません。シンボリック リンクが作成されると/etc/service、runit によって 5 秒以内にサービスが開始されます。

FROM phusion/baseimage

RUN mkdir /etc/sv/disabled_service
ADD disabled_service.sh /etc/sv/disabled_service/run
RUN chmod 700 /etc/sv/disabled_service/run

RUN mkdir /etc/sv/enabled_service
ADD enabled_service.sh /etc/sv/enabled_service/run
RUN chmod 700 /etc/sv/enabled_service/run
RUN ln -s /etc/sv/enabled_service /etc/service/enabled_service

CMD ["/sbin/my_init"]
于 2015-05-05T21:32:45.577 に答える
3

phusion/baseimage:0.9.17(どのバージョンで導入されたかは不明) を使用すると、Dockerfile を焼き付けることができますRUN touch /etc/service/jboss/down。runit が起動時に起動するのを防ぎますが、後で起動できますsv start jboss

于 2015-12-05T11:43:44.057 に答える
0

私はまったく同じ問題 (コンテナーで Cassandra を実行している場合) を見ていますが、明確な答えが見つかりません。これが私が思いついた2つのハッキーな方法です。

run-起動時に何かを開始するかどうかに応じて、ファイルを出し入れする初期のランレベル スクリプトを用意します。

-(mis)service制御コマンドの 1 つを使用しrunit実際にサービスを開始し、ダミーrunコマンドを使用して自動開始をバイパスします。

どちらの方法も明らかに理想的とは言えませんが、いくつかの目的には有効です。

于 2015-05-05T00:03:22.293 に答える