Dockerコンテナに別のコンテナを再起動するコマンドを実行させる方法

Dockerコンテナに別のコンテナを再起動するコマンドを実行させる方法

fastAPI Dockerコンテナを作成し、1つのコマンドを除いてうまく動作します...
いくつかのイベントが発生したときに他のDockerコンテナを再起動する必要があります。

dockerを実行するサーバー[ホスト]があり、dockerはコンテナA(fastAPI)およびコンテナBを実行しています。
ホストにこのコマンドを実行させるコマンドをコンテナAで実行させるにはどうすればよいですか?

ドッカー再起動コンテナB

ホストオペレーティングシステムはLinuxです。

私はPythonのsubprocess.run()を使ってみましたが、もちろんうまくいきません。 ContainerA には docker がインストールされていないため、docker コマンドはありません。
Unixソケットのインストールが機能するという記事を読んで、 '/var/run/docker.sock:/var/run/docker.sock'をインストールしようとしましたが、うまくいきませんでした。

どのように動作するかを知っていただきありがとうございます。
ありがとうございます。

答え1

/var/run/docker.sock快適さを感じる限り、一般的なアプローチはコンテナ内に設置することです。ホストのDockerデーモンをコンテナに公開する。これを行うには、コンテナ内でDockerクライアントバイナリ()を使用できることも確認する必要があります。dockerそうでない場合は、それを画像に追加する必要があります。

答え2

ディレクトリにマウントし、ホストとコンテナ間のマウントにファイルを作成し、ホストでこのディレクトリへの変更を確認して、Dockerコンテナを再起動する方が良い設計です。

通常どおりホストからマウントをバインドします。

docker run ... -v /host/path:/container/path:rw

ホストシステムでディレクトリを確認します。

while true; do
    if test -e "$dir/test"; then
        docker restart containerX
        rm -f "$dir/test"
    fi
    sleep 1
done

コンテナ内:

touch "$dir/test"

警告する

コンテナ内でdockerコマンドを実行するためにdockerソケットを共有することは技術的に可能ですが、dockerの専門家はセキュリティ上の理由からそうしないように勧めます。


DooDとDinDについて学ぶpodman、この方法にこだわると、セキュリティが向上する可能性があります。podmanこのように実行されるルートサービスはありませんdocker

関連情報