0

OpenSuse 12 に基づいて Docker コンテナーをセットアップし、いくつかの追加ファイルをインストールし、いくつかのインストーラー バイナリをコンテナーにコピーしました。これまでのところ、すべて問題ありません。

コンテナーの実行中のイメージ内から、前述のセットアップ プログラムを実行する必要がありますが、これには uuid.socket を起動して実行する必要があります - uuid.socket が正しく動作するためには systemctl が必要で、これにより次のようなエラーが発生します。

hxehost:/usr/sap/SRCFiles # systemctl
Failed to get D-Bus connection: Unknown error -1

次のようにドッカーコンテナを開始しました:

docker run -h hxehost -i -t f3096b0aa964 /bin/bash

いくつかの投稿によると、アプリケーション コンテナーではなくマシン コンテナーを開始する必要があります。

ここで私が間違っていることを誰か教えてもらえますか??? docker コンテナー内で systemctl を動作させるにはどうすればよいですか?

リンクされたヒントによると、このコマンドでコンテナを起動しようとしましたが、役に立ちませんでした

docker run --privileged --rm -ti -e 'container=docker' -h hxehost --network="bridge" --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro siliconchris/hxe:v0.0.2 /bin/bash

これを行うと、systemctl はまったく同じエラーを返します。

/bin/bash の代わりに/sbin/initを開始すると、非常に多くのサービスが開始されていることがわかります (wicked、login、module などの一部は失敗します)。最終的に、コンテナーはログインを提示します。ログイン後、systemctl を実行できるようになり、すべてのサービスとそれぞれの状態が表示されます。

さて、私の次の質問は次のとおりです。このアプローチはまったく実現可能ですか???

よろしくお願いします、

クリス

このイメージのリポジトリは、Docker 内の SAP HANA Express Edition にあります。

4

1 に答える 1

0

現在のほとんどの Linux システムは SystemD の実行に依存しており、systemctl は SystemD にリクエストを送信します。しかし、systemctl バイナリを start/stop/status/enable コマンドを解釈するだけのスクリプトに置き換えたところ、ほとんどのアプリケーションは簡単にインストールできました。もう 1 つの利点として、結果のイメージで systemd をコンテナーにマップするための複雑な起動コマンドが不要になります。それはあなたを助けるでしょうか?docker-systemctl-replacementをご覧ください。

于 2017-03-23T14:52:45.000 に答える