私は1つのドッカーコンテナを持つホストマシンを持っています。コンテナはアクティブであり、特定のサービスを実行しています。特定の条件を満たすと、コンテナを取り出してマシンをシャットダウンする必要があります。それは可能ですか? マシンのシャットダウンを処理するサービスを実行するコードを変更する予定ですか?どんな提案も歓迎です!ドッキング・コンテナの1つでコマンドを実行してホスト・マシンをシャットダウンすることはできますか?
答えて
これを試しましたか?
sudo docker rm -v container
sudo shutdown
これは手動コマンドであり、ホスト上で実行されます。 OPはそれをコンテナから、プログラム的に行う方法を求めている。 –
Mmmm。しかし、特権モードで、seccompとselinux/apparmourを無効にしてコンテナを実行する必要があります。これは安全で無意味です。また、Dockerソケットをマウントしたり、TCP経由で利用できるようにしたり、APIを使用したりしない限り、コンテナは自分自身を削除することはできません。すべてがホストから行われなければなりません。 –
さて、コンテナからそれをする_is_は、OPが求めていたものです。それが賢明かどうかは別の質問です。 –
クリーンシャットダウンの実行は、ホストのinitシステムによって異なります。
コンテナにアクセスすることを避け、コンテナにホスト固有のinitツールをインストールしないようにするには、コンテナにシャットダウンを実行させるのではなく、シャットダウンするようにホストに通知するインターフェイスを作成できます。
インターフェイス
これはさまざまな方法で実行できます。簡単な出発点は、コンテナとホストの間でデータを共有するマウントされたボリュームです。ファイルは今のところ行いますが、ソケット、FIFO、TCP、または他のIPCメソッドを使用できます。
あなたが必要その後シャットダウン
docker exec $cid sh -c 'echo true > /shutdown_signal'
にホストをしたいときに、ファイルに文字列を書き込み、ホスト上のファイルを作成します/var/run/shutdown_signal
を言うと、あなたのコンテナ
docker run -d -v /var/run/shutdown_signal:/shutdown_signal whatever
にファイルをマウントしますファイルを監視するためにホスト上で動作しているもの。
inotifywait
でファイルの変更を待つ単純なスクリプト。
echo "waiting" > /var/run/shutdown_signal
while inotifywait -e close_write /var/run/shutdown_signal; do
signal=$(cat /var/run/shutdown_signal)
if [ "$signal" == "true" ]; then
echo "done" > /var/run/shutdown_signal
shutdown -h now
fi
done
inotifywait
が利用できない場合、ファイルをポーリングできます。
while sleep 30; do
signal=$(cat /var/run/shutdown_signal)
...
恐ろしい代替
のLinuxですぐに、汚れたシャットダウンをトリガするために、より普遍的な、カーネル方法もあります。
docker run --privileged busybox \
sh -c 'echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger'
しかし、これは価値があるよりも多くの問題を引き起こす可能性があります。
コンテナとホストの間にインタフェースがあり、ホスト上でスクリプトが実行されている場合、ホストからよりクリーンな方法ですべてを実行できるかどうかは分かりません。 –
@RicardoBranco OPはコンテナ内で動作しているサービスからそれを行うように求めました。 – Matt
OPは、ホストとのインターフェイスを作成せずにこれが不可能であることを伝える必要があります。しかし、インタフェースは無意味です。なぜなら、とにかく、すべてがホスト上で適切な方法で実行できるからです。 –
- 1. どこでドッキング用のコンテナをホストできますか
- 2. Kubernetesで別のコマンドでドッキング・コンテナを実行する
- 3. ドッキング・コンテナからホスト・マシンにデータを保存する
- 4. ドッキング用のコンテナをホスト外にpingすることはできません
- 5. ドッキング・コンテナをライブWebサーバーで実行できますか?
- 6. setuidバイナリでドッキング・コンテナを実行する
- 7. ドッキング・コンテナ内のホスト・マシンのIPアドレスを読み取る
- 8. 同じホスト上のドッキング・コンテナで複数のhttps対応サービスを実行するマシン
- 9. Dockerを持つドッキング・コンテナとしてCloudantを実行
- 10. ドッキング・コンテナの中からホスト・マシンのディレクトリにアクセスする方法は?
- 11. kubeletをドッキング用のコンテナとして実行する方法
- 12. ドッキングされたアプリはホスト上でスクリプトを実行できますか?
- 13. ドッキング・クラウド・コンテナ内でクローンジョブまたはタスクを実行する
- 14. ドッキング・コンテナ内でDjangoアプリケーションを実行しているときに502 Bad Gatewayを取得していますか?
- 15. ホストのホスト名をドッキング・コンテナから設定する
- 16. Dockerコンテナを停止するときにコマンドを実行できますか?
- 17. ドッキング・コンテナをホスト・ネットワーク上で完全に表示できますか?
- 18. どのように1つのホスト上で特定のタスクを実行することができますか?
- 19. pythonループでtime.sleep(1)を実行するとドッキングが固まる
- 20. ドッキング・コンテナでpostgresコマンドを実行するにはどうすればいいですか?
- 21. Rの1行で2つのコマンドを連続して実行しますか?
- 22. 1つのbash行にコマンドを埋め込むことはできますか?
- 23. sshでホストにアクセスし、ホストでコマンドを実行するPythonスクリプト
- 24. ホストをアップグレードした後でDockerコンテナを実行できますか?
- 25. phabricatorは、ドッキングされたPHPコンテナ内のドッキングされたmysqlを見つけることができません
- 26. ドッキング・コンテナから実行するとcqlshが失敗する
- 27. 複数のOpenDSインスタンスを1台のマシンでホストすることはできますか?
- 28. ホスト間でドッキング用のコンテナを移動する
- 29. bashの.aliasesファイルでコマンドを1つずつ実行します。
- 30. ドッキング用のコンテナで.NET単体テストを実行する方法
'privileged'フラグを持つコンテナは、必要に応じて関連するハードウェアの要求を直接行うことで、ホストをシャットダウンすることができます。このフラグ(またはホスト上で実行されている他のコード)なしで動作したコンテナ*からホストのシャットダウンをトリガするメカニズムは、バグを構成します。 –