web-dev-qa-db-ja.com

コンテナーでのサービス(upstart / init.d)の実行

多くのinitおよびupstartサービスを備えたdockerでシステムを起動しようとしていますが、このエラーが発生します。

initctl: Unable to connect to Upstart:
Failed to connect to socket /com/ubuntu/upstart: Connection refused

すべての回避策は、エラーを沈黙させるために/ bin/trueへのハードリンクを作成することを提案しています。しかし、再起動機能とupstart放出イベントを機能させるには、これらのサービスをupstartで管理する必要があります...

Dockerはこれをサポートしていないようですので、/ etc/rcX.d内のすべてのサービスを起動し、PIDを追跡するスクリプトを作成するという大げさなハックを検討しています。それは、最初から放出イベントの欠如を解決しません。

Dockerで起動プロセスを起動する方法の他のアイデアはありますか?

9
Neil McGill

残念ながら、upstartは、initシステムで魔法をかけるため、Dockerコンテナー内では機能しません。

これ 問題 説明:

アプリケーションがupstartを使用している場合、これは裸のDockerイメージにはうまく適合せず、/ sbin/initまたは/ sbin/initctlを/ bin/trueまたは/ dev/nullのようなものに転送するとさらに適合しません。これに古い学校のsystemVinitscriptがあり、initctlコマンドが流用されていない場合、アプリケーションはサービスを使用して開始できます。

Salt-minionの場合、ubuntuでは、パッケージ化はupstartジョブを使用し、従来のinitスクリプトを使用しないため、どちらの場合も起動しないのが普通です。

そして これ は言う:

Dockerはデフォルトの/ sbin/initを独自のものに置き換えるため、Dockerコンテナー内でUpstartinitを実行する方法はありません。

12

あなたは間違いなくそれを行うことができるはずです。それは実際には「DockerWay」の方法ではありませんが、非常に可能性があります。 phusion/baseimage ベースイメージの使用を検討することをお勧めします。組み込みのrunitがサポートされています。upstartを使用する場合は、その方法をご覧ください。彼らはエントリポイントを実装しました、/sbin/myinit、そしてそれに従ってください。

3
Abdullah Jibaly