Docker は init を実行していません。そのため、起動時にサービスは開始されません。lxc は lxc-start 中に init を実行します。Docker は lxc を使用しているため、init を実行していないのはなぜですか。init を実行せず、デーモン化のために supervisord に依存する利点は何ですか?
答え1
Dockerはアプリケーションコンテナコンテナとしてアプリを配布することに重点を置いています。この方法では、実行中のアプリ/プロセスは内部実行されているのはコンテナの init プロセスのみです。プロセスにさらに多くのアプリケーション (mysql、mongodb データベースなど) が必要な場合は、1 つの init デーモンによって管理される Docker コンテナ内でこれらを起動するのではなく、Docker コンテナ内でさらに Docker コンテナを起動します。
あなたが試すことができますベースイメージこれは、Dockerイメージ内でより多くのプロセスを実行するためのシンプルなinitデーモンを提供します(これはUbuntuベースです)。または、LXDを試すこともできます。http://www.ubuntu.com/cloud/lxdコンテナ技術は、システムコンテナ。
答え2
この疑問は、問題GitHub で、プル リクエストがマージされ、init
0.6.x 以降で実行できるようになりました):
docker run $IMAGE /sbin/init
initが実行されなかった元の理由(0.6.x):
新しいコンテナを起動すると、docker はコンテナ内で自身を /sbin/init として mint バインドし、実際の /sbin/init を隠し、プロセス内で実行できないようにします。
この答えさらなる支援を提供する可能性があり、Docker ガイドブック役に立つかもしれません。