1

今日のコンテナ用Linuxアプリケーションのデプロイメント中に、アプリケーションが失敗して起動しませんでした。 Kuduのログを調べると、依存関係のインストール中にファイルを削除しようとしてクラッシュするため、アプリケーションの実行に失敗したことがわかりました。手動でファイルを削除しようと共有ファイルシステム内のファイルを削除できません

、それはクラッシュに続く:

/home/site/wwwroot>ls -la libs/lxml 
total 6868 
drwxrwxrwx 2 nobody nogroup 4096 Oct 28 01:13 . 
drwxrwxrwx 2 nobody nogroup 16384 Oct 28 01:23 .. 
-rwxrwxrwx 1 nobody nogroup 304689 Oct 27 20:09 _elementpath.cpython-36m-x86_64-linux-gnu.so 
-rwxrwxrwx 1 nobody nogroup 6704624 Oct 27 20:09 etree.cpython-36m-x86_64-linux-gnu.so 
/home/site/wwwroot>rm -Rf libs 
rm: cannot remove 'libs/lxml': Directory not empty 
rm: cannot remove 'libs/newrelic/core': Directory not empty 
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty 

/home/site/wwwroot>rm -R libs 
rm: cannot remove 'libs/lxml/etree.cpython-36m-x86_64-linux-gnu.so': No such file or directory 
rm: cannot remove 'libs/lxml/_elementpath.cpython-36m-x86_64-linux-gnu.so': No such file or directory 
rm: cannot remove 'libs/newrelic/core/_thread_utilization.cpython-36m-x86_64-linux-gnu.so': No such file or directory 
rm: cannot remove 'libs/newrelic/packages/wrapt/_wrappers.cpython-36m-x86_64-linux-gnu.so': No such file or directory 

私は、アプリを「停止」しましたが、ファイルがundeleteableであり続けます。

アプリを削除して再作成するのではなく、アプリをもう一度実行するにはどのようなオプションが必要ですか?

編集:示唆したように私が代わりにrm -rfを使用してみましたが、-r-Rが同じオプションなので、違いはありません。

/home/site/wwwroot>ls -la libs 
total 16 
drwxrwxrwx 2 nobody nogroup 16384 Oct 28 01:23 . 
drwxrwxrwx 2 nobody nogroup  0 Sep 10 03:51 .. 
drwxrwxrwx 2 nobody nogroup  0 Oct 28 01:13 lxml 
drwxrwxrwx 2 nobody nogroup  0 Oct 28 01:13 newrelic 
/home/site/wwwroot>rm -rf libs 
rm: cannot remove 'libs/lxml': Directory not empty 
rm: cannot remove 'libs/newrelic/core': Directory not empty 
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty 

/home/site/wwwroot>rm -rf libs 
rm: cannot remove 'libs/lxml': Directory not empty 
rm: cannot remove 'libs/newrelic/core': Directory not empty 
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty 

私が使用しているので、私はSSHオプションを使用することはできませんコンテナとしてpython:3(Azureのカスタマイズなし)。

私はいつでも(このアプリで)container customized for Azuresource for which is hereを使用しようとしました。そのコンテナはすべて、アプリケーションの起動時にSSHサービスを開始するための追加ステップを追加するので、現在の障害には関係しないようです。

編集:私はjaraco/python-azureコンテナを使用するようにアプリケーションを更新しました(そしてそのコンテナのバグを修正しました)。私は短い時間の間にアプリのコンテナにSSHできました。その中でlsofをインストールしようとしましたが、そのコマンドが完了する前に、SSH接続が切断されていることがわかりました。ファイルを削除できないためにドッキング用のコンテナが終了しています。 、init_container.sh bash -c \"sleep 300\"

internal server error in webssh

私はコンテナの異なるスタートアップファイルを使用してみました

私は以来、私はwebsshエンドポイントから内部サーバーエラーを取得していて、SSH経由で再接続することはできませんされました私はそれをsshしている間に5分間スピンアップするかもしれませんが、それを実行してもSSHできず、websshエンドポイントから503のエラーしか受け取りませんでした。診断コンソールでは、適切なコマンドでドッカー画像を開始します。私は希望を失ってい

2017-10-31 02:36:40.629 INFO - Issuing docker pull: imagename =jaraco/python-azure:latest 
2017-10-31 02:36:40.668 INFO - Issuing docker pull: imagename =jaraco/python-azure:latest 
2017-10-31 02:36:40.709 INFO - Issuing docker pull jaraco/python-azure:latest 
2017-10-31 02:36:41.835 INFO - docker pull returned STDOUT>> latest: Pulling from jaraco/python-azure 
Digest: sha256:589b1150b8b5893662a9dc7d0919e577cb2a95fcb0524fd1fffd7e5d8122b261 
Status: Image is up to date for jaraco/python-azure:latest 
2017-10-31 02:36:41.855 INFO - Starting container for site 
2017-10-31 02:36:41.856 INFO - docker run -d -p 28374:80 --name APPNAME-dev_0 -e PORT=80 -e WEBSITE_SITE_NAME=APPNAME-dev -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=110c23d861dcaa09836ed00f278d29dc4b913a207c2d9dd4ed54366e3c2f6a3a -e HTTP_LOGGING_ENABLED=1 jaraco/python-azure:latest init_container.sh rm -rf /home/site/wwwroot/libs/* 

2017-10-31 02:36:47.946 INFO - Container logs 
2017-10-31T02:36:42.675769119Z Starting OpenBSD Secure Shell server: sshd. 
2017-10-31T02:36:44.736417871Z rm: cannot remove ‘/home/site/wwwroot/libs/lxml’: Directory not empty 
2017-10-31T02:36:45.596986651Z rm: cannot remove ‘/home/site/wwwroot/libs/newrelic/core’: Directory not empty 
2017-10-31T02:36:45.649171980Z rm: cannot remove ‘/home/site/wwwroot/libs/newrelic/packages/wrapt’: Directory not empty 
2017-10-31 02:36:47.947 ERROR - Container APPNAME-dev_0 for site APPNAME-dev has exited, failing site start 

:私もinit_container.sh rm -rf /home/site/wwwroot/libs/*にスタートアップファイルを更新しますが、診断コンソールを使用してみました

は、私は同じエラーがアプリのコンテナで発生してご覧ください。その他のオプションは?

:App Service PlanをS1からS2に変更し、サービスを要求して(移動をトリガーする)、アプリをS1に戻して問題をクリアしましたが、一時的にクリアしました。週末の後半にサービスへのトラフィックが再開されたとき、しばらくの間サービスを利用できなかったために再び失敗し始めました。ログを調べると、同じエラーが戻ってきました。起動時に、アプリケーションはこれらのファイルを削除しようとしますが、明らかにそれらのファイルが使用されているため、削除およびその後の起動手順は失敗します。さらに悪いことに、App Service Planを変更すると、先週問題を修正したようだが、今回は十分な回避策ではないようだ。さらに、App Service Planのサイズを変更すると効果的ですが、そのサービスプランで他のアプリをオフラインにするなど、意図しない副作用もあります。

共有ファイルシステム(/ homeにマウントされている)に関する実装の詳細によっては、開いているファイルがロックされ、展開プロセスや別のインスタンスの起動や手動で削除できないものと思われます。

私の唯一の選択肢は、共有ライブラリなど、アプリケーションによって開かれている可能性のあるファイルに対して共有ファイルシステムを使用しないことです。

編集:問題を最小限に抑えるため、this web appdeployed it hereを作成しました。現在正常に動作しています。私はそれをしばらくの間アイドル状態のままにしておくと、フラッシュされ、その後の要求によって再度実行され、失敗することが期待されます。効果があるかどうかを報告します。

を編集します。新しいWebアプリケーションで問題を再現できませんでした。私はそれが問題を引き起こすかどうかを確認するために、アプリをアイドル状態のまま24時間放置してみました。また、 'newrelic'依存関係(.so共有ライブラリの1つを含む)を明示的にダウングレードし、webappを起動して停止して 'run'スクリプトを再度起動させました。しかし、私が何をしても、アプリはうまく始まります。私は今、失敗したプロダクションアプリを一掃して再構築し、問題がなくなるかどうかを確認する必要があると考えています。

+0

'rm -rf libs'を試しますか? –

+0

Kuduデバッグコンソールを使用すると、webappをrootユーザーとして管理できる 'SSH'を試すことができます。あなたのパスはユーザーのパスです、私はあなたがディレクトリを削除できると思います。 –

答えて

1

Azure Web Appsのデザイン上の制限だと思われます。アプリケーションによって開かれた共有ファイルシステム内のファイル(読み込み専用であっても)は、書き込み可能または削除可能ではありません。唯一の選択肢は、共有ファイルシステム以外の場所にそのようなファイルを保存するようにアプリケーションを再設計することです。

この問題は、Windows上でホストされている共有ファイルシステムによって悪化すると考えられます。 Unixシステムでは、通常、ファイルが別のプロセスによって開かれていても削除できます。したがって、Web Apps For Containersのユーザーにとっては、ファイルを削除できないという驚きがあります。そのため、エラーなく簡単に残っています。

1

Kuduコンソールでは、あなたのウェブアプリSSHを試すことができます。 rootユーザーとしてログインすると、これらのファイルとディレクトリを削除できます。

ディレクトリlibs/lxmlが必要ない場合は、次の手順で削除することをおすすめします。

cd /home/site/wwwroot/libs/lxml 
rm -rf * 
cd .. 
rm -rf * ## rm -rf lxml 
cd .. 
rm -rf libs 

更新:

リサイズアプリのサービスプランのサイズは、多分それは、この問題を解決する、他のホストにあなたのウェブアプリを変更します。

+0

別のイメージを展開せずにSSHを試すことはできません。これらのコマンドが、[kuduのコンテナで失敗した]アプリケーションコンテナで実行されると期待しますか(https://gist.github.com/9577d88b75def4a94c9b58f99dfcce1c)?別のイメージで展開してSSHルートを試してみるべきですか? –

+0

@ JasonR.Coombsエラーログによると、あなたのスクリプトが削除できなかった '.file'があるようです。スクリプト 'cd/home/site/wwwroot/libs/lxml && rm -rf *'を変更することをお勧めします。 '*'はすべてのファイルを削除します。 –

+0

@ JasonR.Coombs「別のイメージで展開してSSHルートを試してみるべきでしょうか?あなたがイメージにsshするときには 'apt-get install lsof'を試して、' lsof etree.cpython-36m-x86_64-linux-gnu 'を使うことができます。ファイルを使用しているかどうかを確認します。 –

関連する問題