systemctlがバスに接続できませんでした-docker ubuntu:16.04 container


72

Dockerコンテナでsystemctlコマンドを使用しようとしていますubuntu:16.04。私は次のコマンドを実行しています...

systemctl status ssh

しかし、エラーが発生しています...

Failed to connect to bus: No such file or directory

なぜこれが機能しないのですか?これは、ドッカーコンテナーで実行されているUbuntuに関連していますか?どうすればsystemctl正しく機能するようになりますか?


2
使用service ssh start
-Bidyut

回答:


50

私はあなたが次のようなものでDockerコンテナを起動すると仮定します

docker run -t -i ubuntu:16.04 /bin/bash

問題は、initプロセスのPID 1が/bin/bashsystemdではなく、ということです。で確認しps auxます。

それに加えて、dbus withが欠落していることが通信方法です。これがエラーメッセージの送信元です。ただし、PID 1はsystemdではないため、dbusをインストールしても役に立ちません。

最善の方法は、Dockerの使用方法を再考することです。プロセスマネージャとしてsystemdに依存せず、ドッカーコンテナで目的のアプリケーションをフォアグラウンドで実行します。


openssh-serverなどのサービスは、デフォルトのsyslog機能にログを記録するように構成されています。systemctlに依存せずにsshdログを取得するにはどうすればよいですか?
パルスシャー

@ParthShah sshdのmanページをご覧ください。Mineには次のオプションがあります。-Dで調整することで、フォアグラウンドに保持できます。-eを使用すると、ログを直接印刷するように指示します。これらは、後でDockerの方法で検査できdocker logます。
user228505

[FYI]は/sbin/initPID = 1プロセスであるため、このエラーを受け取っていました。--privileged=true以下の@sonjaya sonjayaで提案されているように追加すると、問題が解決しました。
DimG

美しい答え!!
サチンヴァーマ

11

他の人も同様の問題を報告しています。ターミナルを起動して、次を入力します。

$ env

このような環境変数が表示されますか?

XDG_RUNTIME_DIR=/run/user/`id -u`

どこid -uが一重引用符ではなくバッククォートで囲まれています。この変数は1000、通常のユーザーおよび0スーパーユーザー(sudo)の場合、通常は数値に再解釈されます。

環境変数XDG_RUNTIME_DIRが存在しない場合は、作成する必要があります。完全な議論はlaunchpad systemd Answersにあります


2
成功せずにこれを試しました。私のUbuntu 16.04インスタンスはドッカーコンテナの形をしており、私が働いているユーザーを設定していないrootので、変数を使用しましたがXDG_RUNTIME_DIR=/run/root/0成功しませんでした。次に、フォルダを確認し/runましたが、サブフォルダはありませんでした/run/root。とにかく、より詳細なエラーメッセージを取得できますか?私は見ていたが、systemctl --help詳細なエラーメッセージを取得する方法を見ることができませんでした。
ダンカングラビル

1
私は同じ問題を抱えていますが、これも私の問題を解決しませんでした。@DuncanGravill
Roeland

3
@Roelandはい。私は尋ねた同様の質問に強い反応を示したSO上を。また、Docker WebサイトでSelf-Pacedチュートリアルを見ることをお勧めします。それらのビデオPID 1ではsystemd、DockerコンテナーでコンテナーEntrypointを使用して通常どのように置き換えられるかが(わずかにあいまいに)説明されています
ダンカングラビル16

素晴らしい、ありがとう!システムユニットからユーザーユニットを起動/管理するためにこれが必要でした。
エイドリアンギュンター

5

Linux用Windowsサブシステム(WSL)でこのエラーが発生している場合、Dockerがサポートされていないためだとわかりました。これは、cgroupの不足およびその他の前提条件によるものです。


3

これを試して:

docker run -ti -d --privileged=true images_docker  "/sbin/init"

または

docker run -ti -d --privileged=true images_docker

同じ結果になります。

ここでは、Dockerドキュメントから取得します。

デフォルトでは、Dockerコンテナは「非特権」であり、たとえば、Dockerコンテナ内でDockerデーモンを実行することはできません。これは、デフォルトではコンテナはどのデバイスにもアクセスできないが、「特権」コンテナにはすべてのデバイスへのアクセスが許可されているためです(cgroupsデバイスのドキュメントを参照)。

オペレーターがdocker run --privilegedを実行すると、Dockerはホスト上のすべてのデバイスへのアクセスを有効にし、AppArmorまたはSELinuxでいくつかの構成を設定して、ホスト上のコンテナーの外部で実行されるプロセスとほぼ同じアクセスをコンテナーに許可します。--privilegedを使用した実行に関する追加情報は、Dockerブログで入手できます。


2
あなたの命令と受け入れられた質問との違いを説明してもらえますか?
メレビウス

AskUbuntuへようこそ!助けてくれてありがとう!ドキュメントをすばやく確認すると、このコマンドでエラーが発生したか、2が発生した可能性があります。あなたがそれを編集し、あなたが何をしていて、それがどのように問題を解決するかを説明するほど親切であれば、私にpingを送って、戻ってきてあなたに賛成票を差し上げます!
オタク長老

images_dockerと言うとき、バニラubuntu:16.04を意味しますか?または、他の何か?
パルシャシャー

1

16.04 のinitのデフォルト実装であるsystemdを実行していない可能性があります。14.04からアップグレードした場合、おそらくupstartを実行している可能性が高く、systemctlコマンドを実行した結果が得られた出力になります。

systemctlでの私の答えを参照してください:comand not found 16.04 server for more。


しかし、これはUbuntuコンテナであり、デフォルトではsystemdがなく、新興企業はありません。
ステファンLasiewski

何?ubuntuはデフォルトでsystemd
knocte

Stefan:Dockerの場合は正しいと思います。
ヒューBuntu

knocte:私のコメントでは、14.04(Upstart)から16.04(systemd)にアップグレードする場合について説明しています。バージョンのアップグレードを実行するとき、Upstartは理解可能な理由(システムを壊さないなど)のためにsystemdに置き換えられません。振り返ってみると、リリースアップグレードプロセスはDockerでは使用されないことがわかります。私が呼び出したリンクを参照してください。Dockerの特定のケースについて多くの回答とコメントが考慮されていないことがわかります。今後回答する際にそのことを探します。
ヒューBuntu

1

dbusサービスを開始するだけです:

/etc/init.d/dbus start

0

まだdockerコンテナ内で、systemdに苦労しているならupdate-rc.dができると思います。update-rd.cを試してみましたが、動作します。


0

私はまったく同じエラーを受け取っていたので、それを正常に実行しました sudo

sudo systemctl status ssh

1
sudoその必要はありません。偶然のようです。再テストしてもらえますか?
ザンナ

1
@Zannasaif@sr-server:~$ systemctl status ssh Failed to connect to bus: No such file or directory saif@sr-server:~$ sudo systemctl status ssh [sudo] password for saif: ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-01-19 23:38:14 PKT; 4min 4s ago Main PID: 18222 (sshd) Tasks: 15 Memory: 32.7M CPU: 488ms
サイフ

なぜ-1ですか?私はちょうど私のために働いたものを投稿しました。
サイフ

downvoteは私は...ありませんでした
Zanna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.