docker Ubuntu 16.04を実行しsystemdを使用
2064 ワード
誤報
最近dockerを使用してubuntu 16.04ミラーを実行し、ミラーに入った後に
の原因となる
原因は以下の通りです.
Dockerの設計理念は容器の中でバックグラウンドサービスを実行しないことであり、容器自体がホスト上の独立したメインプロセスであり、間接的に容器の中でサービスを実行する応用プロセスであると理解することができる.1つのコンテナのライフサイクルはこのメインプロセスの周りに存在するので、コンテナを正しく使用する方法は、中のサービスをフロントで実行することです.システムについては、従来のシステムVスタイルのサービス管理に代わって、CentOS 7、Ubuntu 14+などの主流Linuxリリース版のデフォルトのサービス管理となっています.Systemdは、Linuxカーネルにアクセスする権限を持つシステム・サービス・プログラムを維持します.コンテナは完全なオペレーティングシステムではなく、ファイルシステムが1つしかなく、デフォルトの起動は普通のユーザーのような権限でLinuxカーネルにアクセスするだけで、つまり特権がないので、自然に使えません.そのため、容器の設計原則を守って、1つの容器の中で1つのフロントサービスを実行してください!
解決策
しかし、時には容器の中に行っていくつかの機能を実現したいだけです.私はバックグラウンドサービスを実行したいのですが、どうすればいいですか?
ネット上の大部分の解決方法は以下の通りです.コンテナの作成: 容器に入る:
新しい質問
しかし、この手順に従って操作すると、次のエラーが発生しました.
最終的な答え
なぜなら、上記の解決策はコンテナの作成: 容器に入る:
このとき、
最近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
コマンドを使用できることがわかりました.問題解決!