突然ローカルのDockerコンテナーにリモート接続できない問題の解決 DIY

パソコン関連DIY

今日、自宅のローカルネットワークの環境で、ThinkPadX201のWindows10で動かしているDocker Containerに、他のパソコンからアクセスできなくなったのですが、色々と原因を調べて判明したので紹介します。私の場合、原因はWindows10の自動更新だったようです。

これは、その時の問題点にまでたどり着くまでに行った事です。

なんで自宅でDocker Container立ち上げてるの?

そうなんです、ふつう必要ない?ですよね。

実は私は、昔(2017年まで)子供たちの成長の記録や、自分の日記をホームページにして公開していました。閲覧する人は自分達や親戚や海外のお友達でしたが、結構子供たちの成長の記録でもあり、誕生から高校入学までの様々な出来事を観ることができます。大変良い成長の記録でもありました。また当時やってた仕事が、ホームページのCMS(Content Management)を扱う仕事で、その経験から自分のCMSをDIYで開発して写真を自動でリサイズして取り込んだりとか、日本語の説明を自動的に翻訳して英語ページも同時生成とか仕事がらみの勉強も兼ねて楽しんでおりました。コンテンツも全て自動的にDTDを定義する事で作成されるInput Formで、XMLを生成して、xalanを使ってXSLでHTMLに変換したりとか、ホームページを楽に制作できる様にしていたので膨大な量のコンテンツ(XML)ではありますが、デザイン変更とかレイアウト変更とか、サイトの一新にはXSLをいじるだけで簡単にでき、色々とホームページCMS開発も含めDIYで楽しんでおりました。しかし、流石に子供たちも大きくなり、公開ホームページでは大量の写真はプライバシー問題や、ちょっと学校のお友達に見られるのも恥ずかしいかもしれないと思い、2017年以降はホームページはやめてしまいました。

でも、家で家族がいつでも見れる様にしておきたいなぁ〜と思い立ち、DockerでNginxとPHPをPullしてサクッとホームページを再構築しました。コンテナーはWindowsのソフトに影響与える事なく、またコンテナー化しておけば、すぐに他の環境に引っ越しもできるので、結構便利ですよね。

ですが、今朝久々に閲覧してみようと思ったら観れなくなってました。

経験した不具合

Windows10で稼働中のNginxのコンテナーに、同じローカルネットワーク上の他のマシンからブラウザーで接続しようとしたら、全然繋がらなくなってました。今まで問題なく接続できていたのにです。

問題解決への道 その1(ネットワーク接続を調査)

まず、そもそも問題のPCはWiFi接続なのですが、ネットワークにちゃんと接続できているのか?をルーターの管理画面を開いて確認してみました。調べたところ、ちゃんと設定したIPで接続されてます。しかも他のWindowsOSのマシンからRemote Desktop接続もできます。ネットワーク的には問題ない様に見えますが、他のデバイスからブラウザーでこのIPアドレスにアクセスしても無反応です。Chromeの検証ツールを開いて、Networkタブで調べても、何も表示されず無反応で解決の糸口さ掴めません。

問題可決への道 その2(コンテナーの調査)

Remote DesktopでそのDockerコンテナーが稼働中のマシンにログインして調査しました。このマシン、子供部屋のベッド下の奥深くにあるので、そのマシン自体をひっぱり出してわざわざ作業はしたくないので、Remote Desktop経由で解決をはかりました。

まずX201に接続して、Windows Promptから、以下のコマンドを打ってみました。

docker ps

すると、お〜〜 〜!! dockerが動いてない! Docker desktopが落ちてる様です。なんと、こんな単純あ問題か〜。 dockerが動いてないとcontainerもありません。そこで、Windowsのイベントビューアーで調べたてみたら、どうやら2日前にWindows10に再起動がかかっていたみたいです。

 EventData 

  param1 C:\Windows\System32\usocoreworker.exe (THINKPAD-X201) 
  param2 THINKPAD-X201 
  param3 オペレーティング システム: Service pack (計画済) 
  param4 0x80020010 
  param5 再起動 
  param6  
  param7 NT AUTHORITY\SYSTEM 

このusocoreworker.exeってのが、Windowsの更新の準備が整うと自動的に再起動してインストールする役割のあるプロセスらしいです。

Hmmm〜 Windows10のやつ、勝手に余計な事を・・・・ 全く迷惑なRebootです。OSが再起動されて、どうやら、Docker Desktopのサービスが落ちてしまったことに原因がある様です。であれば、Docker Desktopを立ち上げて docker start container-name で元に戻りそう・・・  ですが、それは甘かったです。

問題解決への道 その3(Windowsのネットワーク設定調査)

Dockerが稼働しているThinkPad X201上でChromeブラウザーを立ち上げ、Containerのポートにアクセスするとホームページは問題なく表示されました。やっぱりDocker Desktopサービスの立ち上げで直ったと思いました。そして、再び、別なマシンからこのThinkpad X201のIPへアクセスすると、やはり、以前と同じ状況のまま何も表示されません。コマンドプロンプトからcurlでアクセスしていましたが、Timeoutで終了します。:-(

MacBook-Air-2 ~ % curl 192.168.11.14 -v   
*   Trying 192.168.11.14...
* TCP_NODELAY set
* Connection failed
* connect to 192.168.11.14 port 80 failed: Operation timed out
* Failed to connect to 192.168.11.14 port 80: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to 192.168.11.14 port 80: Operation timed out

ますます、原因不明です。そこで、ブラウザーが表示したトラブルシューティングのリンクをクリックしたところ、次のエラーが表示されました。

Webサイトはオンラインですが、接続試行に応答しません

DockerでContainerが動いているマシンではローカルにアクセス可能です。と言う事は、F/Wかなんか?そんなの設定した覚えないけど。。。

本当の原因

ネットワークが怪しいので、Windowsの設定からネットワークとインターネットのプロパティーをチェックしてみました。するとネットワークのプロファイルの設定で、なんとパブリックにチェックがされていました。以下は、すでに変更後ですが、赤枠の方にチェックが入ってました。

ネットワーク設定画面
この赤枠の方にチェックがあると接続できませんでした。

「え〜こんな設定した覚えないぞ〜〜」です。が、多分、Windows10の再起動で設定が変わったのでしょう(と、しか考え付かない)。

結局、この設定をプライベートにする事で、無事、ネットワーク上の全てデバイスからアクセスできる様になりました。確かに、パブリックだと、ネットワーク上のその他のデバイスから隠され・・って書いてあるので、アクセスできないはずです。ただ見えないだけではなくて、アクセスも出来ないのですね。知りませんでした。

まとめ

Windowsって頻繁に更新が入るようなので、このようなケースもこれから時々ありそうです。最近はWindows10の新しいバージョン(20H2機能更新プログラム)の導入が予定されているらしいです。かってに再起動掛からないようにしておかねばですね。

今回は、ネットワークの設定をPublicからPrivateに変えたら直った話でした。同じ様な問題で困っている方にご参考になれば幸いです。

投稿者プロフィール

diy-hs
diy-hs
”なんでも自分でやってみる” をテーマに、ブログを書いてます。素人には無理と思う様な事も、実際にやってみるとあっさりと出来たりする事もあります。失敗もありますが、失敗する事で経験となり、次は少し上達したりします。それが楽しいです。そんなDIYの情報を発信して行けたらと思ってます。仕事はAIやクラウド関連を担当してます。そんな訳でプログラミングやシステム構築も趣味と実益を兼ねてDIYを楽しんでます。ギターはもともとクラシックギターを学び、インストルメンタル専門でしたが、高校生の頃にテレビでみた卒業の映画でPaul Simonの曲に憧れて、それ以降いろんなジャンルの弾き語りも楽しんでます。S&Gの曲なら楽譜なしで弾けます。^^; Twitterの方でも発信していますので、ぜひフォロー下さい。

コメント

タイトルとURLをコピーしました