Dockerコンテナ内でsystemctl daemon-reloadを実行する方法は?

Dockerコンテナ内でsystemctl daemon-reloadを実行する方法は?

最近、Dockerコンテナ内にカスタムサービス(デーモン)を設定しようとしたときに問題が発生しましたが、役に立つものが見つかりませんでした。

状況は次のとおりです。custom.serviceサービスのすべての設定が設定されたファイルがあります(ただし、ホストシステムで完全に実行されます)。その後、サービスファイルをすべての/etc/systemd/system/サービスファイルが保存されているディレクトリに移動しました。ファイルを移動した後、システムサービスのリストにサービスを追加するコマンドを実行する必要がありましたがsystemctl daemon-reload(何らかの方法でフォルダを再インデックスする必要があります)、ここで問題が発生します。

明らかにDockerには何もないので、systemctl必要なコマンドを実行してサービスをシステムサービスリストに追加することはできません。実行中とは、サービスがシステムに正しく追加されていないことservice custom startを意味します。custom: unrecognized service

誰かが同じ問題に遭遇したと確信していますが、Googleはまだ私を助けていません。たぶんこの問題を解決する方法を知っていますか?それとも、このコマンドにいくつかの選択肢がありますか?

答え1

コンテナ内でsystemdユニットを使用するには、コンテナにsystemdをインストールし、これが最初のプロセスであることを確認する必要があります。たとえば、systemdによって制御されるApache httpdを実行する方法は次のとおりです。

FROM fedora:33
ENV container docker
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
STOPSIGNAL SIGRTMIN+3
EXPOSE 80
CMD [ "/sbin/init" ]

また、複数のボリュームが存在することを確認する必要があります。

docker run -d --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro httpd

(ビルドする画像の名前がと仮定httpd)。

バラより権限のないコンテナでsystemdを実行する詳細をご覧いただくか、コンテナでsystemdを実行する方法Podmanを使用するより簡単な方法。

システムユニットを使用せずにコンテナを再設計する方が簡単です。

関連情報