docker Ubuntu 16.04を実行しsystemdを使用


誤報
最近dockerを使用してubuntu 16.04ミラーを実行し、ミラーに入った後にsystemctlコマンドを使用した後、エラーを発見しました.エラーは以下の通りです.
Failed to connect to bus: No such file or directory

の原因となる
原因は以下の通りです.
Dockerの設計理念は容器の中でバックグラウンドサービスを実行しないことであり、容器自体がホスト上の独立したメインプロセスであり、間接的に容器の中でサービスを実行する応用プロセスであると理解することができる.1つのコンテナのライフサイクルはこのメインプロセスの周りに存在するので、コンテナを正しく使用する方法は、中のサービスをフロントで実行することです.システムについては、従来のシステムVスタイルのサービス管理に代わって、CentOS 7、Ubuntu 14+などの主流Linuxリリース版のデフォルトのサービス管理となっています.Systemdは、Linuxカーネルにアクセスする権限を持つシステム・サービス・プログラムを維持します.コンテナは完全なオペレーティングシステムではなく、ファイルシステムが1つしかなく、デフォルトの起動は普通のユーザーのような権限でLinuxカーネルにアクセスするだけで、つまり特権がないので、自然に使えません.そのため、容器の設計原則を守って、1つの容器の中で1つのフロントサービスを実行してください!
解決策
しかし、時には容器の中に行っていくつかの機能を実現したいだけです.私はバックグラウンドサービスを実行したいのですが、どうすればいいですか?
ネット上の大部分の解決方法は以下の通りです.
  • コンテナの作成:
  • docker run -itd --name=     --privileged=true      /usr/sbin/init
    
  • 容器に入る:
  • docker exec -it      /bin/bash
    

    新しい質問
    しかし、この手順に従って操作すると、次のエラーが発生しました.
    docker: Error response from daemon: OCI runtime create failed: \
    container_linux.go:346: starting container process caused \
    "exec: \"/usr/sbin/init\": stat /usr/sbin/init: no such file or directory": unknown.
    

    最終的な答え/usr/sbin/init/というファイルは存在しないはずです.
    なぜなら、上記の解決策はCentosシステムにのみ適用され、私の容器の中を走っているのはUbuntuシステムで、Ubuntuの中のsystemdファイル名の実際の経路は/sbin/initです.解決策は次のとおりです.
  • コンテナの作成:
  • docker run -itd --name=     --privileged=true      /sbin/init
    
  • 容器に入る:
  • docker exec -it      /bin/bash
    

    このとき、systemctlコマンドを使用できることがわかりました.問題解決!