SmartHomeアプリケーション "FHEM"を実行するDocker Containerに問題があります。問題は、開始後、最初のプロセスがバックグラウンドにフォークし、その後、ドッカーコンテナが停止することです。Docker forking process
どうすればこの問題を防ぐことができますか?
SmartHomeアプリケーション "FHEM"を実行するDocker Containerに問題があります。問題は、開始後、最初のプロセスがバックグラウンドにフォークし、その後、ドッカーコンテナが停止することです。Docker forking process
どうすればこの問題を防ぐことができますか?
@Tanktalusが正しいです。あなたのソフトウェアをフォークにしないことが最良の方法です。
ただし、これが不可能な場合は、提供処理中にコンテナ起動スクリプトを実行する必要があります。これには2つの注意点があります。
--restart=always
のようなオプションで実行されていることを確認することは効果がありません。幸運にも、幸いなことに、これにはbashコマンドwait
があります。のは、例を持ってみましょう:ここに何が起こる
$ cat docker_test.sh
perl -e "sleep(5); exit(42);" &
wait `pgrep perl`
は、1)pgrep perl
は、バックグラウンドでperl
プロセス睡眠のPIDを検索し、そのプロセスを終了させるため2)wait
が待機するということです。さらに、wait
は、終了コードperl
を返します。我々は必要なすべて:私たちは、この取得ドッキングウィンドウで
$ ./docker_test.sh
$ echo $?
42
:
$ docker run -d -v `pwd`/docker_test.sh:/docker_test.sh ubuntu bash /docker_test.sh
537bdfc04554461da7dd6728ca721e4789a08e426adcc01a3359ed22fd16aa1f
[waiting 5 secs]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
537bdfc04554 ubuntu "bash /docker_test.sh" 41 seconds ago Exited (42) 34 seconds ago happy_almeida
それは私に役立ちます。 – Phill93
ソフトウェアを支配している場合は、「バックグラウンドにフォークしない」モードのソフトウェアをエミュレートしてバックグラウンドフォークをスキップするフラグをスタートアップに追加することができます。これはおそらく最も単純なものでしょう。
また、アプリケーションを起動するエントリポイントスクリプトを作成し、アプリケーションの起動後にwhile true; do sleep 1000; done
を追加するだけで済みます。このようにして、エントリポイントは決して戻らず、ドッカーコンテナは引き続き実行されます。
はあなたがここにhttpドッカファイルを見つけることができます全体 'ドッキングウィンドウのrun' – user2915097
で少なくともDockerfile、再生を示しています// github.com/Phill93/docker-fhem – Phill93
Linuxシステム(コンテナではない)で 'sudo -u" $ FHEMUSER "-H perl" $ FHEMFILE "" "$ CONFIGFILE"を起動すると動作しますか? – user2915097