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
。