覚え書き

2017年4月 6日 (木)

PCの時計が1時間進む問題が完全に解決した

前回の続き。 PCの時計が1時間進んでいる問題ですが、 私のPCに関しては問題は完全に解決しました。 わーい。

  • 前回のあらすじ
  • 現状の確認
  • PCメーカーのサポートに問い合わせた→解決
  • 考察など
  • まとめ

前回のあらすじ

  • 自分のPCの時計が1時間進んでいた
  • 原因はPCのファームウェアの設定のせいと確信(thanks to 「「PCの時計が1時間ずれている」の原因 」)。 要するに、四半世紀前ならともかく、現在においてはまったく意味のない"Daylight Savings Enable"がなぜか有効になっているPCがあるということですね。
  • 突如、Microsoftが「修正した」とのニュースが→「えっ?」

現状の確認

Microsoftが修正したとのニュースに「ほんまかいな」と思いつつ、 1日ほど様子を見てました。 しかし、修正は落ちてきませんし、 ツールで覗くとReal-Time Clockの"Daylight Savings Enable"のビットは立ったままです。

念のため、以下の手順で実験をしてみました。

  1. PCのLANから切り離す。WiFiも無効にする(タイムサーバーとの同期を防ぐため)。
  2. Windows上で現在時刻を2017年4月3日午前1:55にセットする。
  3. PC電源を電源を切り、10分放置する。
  4. (10分後に)電源を入れる。
  5. Windows上で時刻を見る。

この結果、時刻は午前2:05頃になっているはずですが、実際には午前3:05頃になっていました。 "Daylight Savings Enable"の仕様通り、午前2時がスキップされています。

(あれ、4月2日だったっけな。 手元に残したメモには4月3日ってあるけど、 "Daylight Savings Enable"の仕様を厳密に解釈すると4月2日が正しいような気がする。 でも、もう直ってしまったので再現させて検証できない… まあ、午前2時がすっ飛ぶ現象が起きたのは確か。)

つまり、時計がずれる問題は直っていない。

PCメーカーのサポートに問い合わせた→解決

ここで意を決して、 PCメーカー(富士通)のサポートに問い合わせを投げました。 問題のPCは富士通 LIFEBOOK WA3/Wです。 これが昨日の夜。

で、今日返事がきました。

(意訳)BIOSアップデートしなはれ。

あー、確かに。 サポートに問い合わせる前に確認するべきでした。 最近、ドライバもほとんどWindows Updateで更新されるので忘れてたよ。

で、サポートページでBIOSを探すと新しいものがありました。 Readmeを見ると、ちゃんと載っているじゃないですか。

■ 5.改版履歴(修正項目)

...略...

(1.20)

  • パソコンの安定性を改善しました。
  • ごく稀に、4月と10月にパソコン内蔵の時計が1時間ずれることがある問題を修正しました。

わーい。 さすがFMVサポート。 こんなくそ面倒くさい問い合わせ分かってもらえるんだろうかと思って、 こんなツイートしてたんですけど、

えらそうなこと言ってほんますいませんでした。

BIOSアップデート後、"Daylight Savings Enable"はちゃんとDisableになっているし、 上記実験をしたら、ちゃんと再起動後の時間が午前2:05になってました。

直った。

考察など

Microsoftが修正したってのは何?

何でしょうねえ… どこかにコミュニケーションミスがあったのかも。 英語サイトを色々検索したんだけど、「修正した」ってニュースは他に無さげだし。 「PCの時計が1時間ずれている」の原因 を書いた人は、 その続編(「PCの時計が1時間ずれている」の原因の解説)で Microsoftのタイムサーバーのマシンでこの現象が発生したんじゃないか、と言ってます。 うーん。 でも、そうだとすると、Windowsの時刻の同期間隔はデフォルトで一週間と聞いているので、 「影響を受けたPCの時計は、日本時間4日未明までに自動で直っているという。」(「PCの時計が1時間ずれる」グローバルで発生「修正した」とMS)なんて言えないんじゃないかな。 よくわからない。

どうして今回だけ騒ぎになった?

これも分からない。 ただ、検索してみると、過去にも時間がずれたという声はあるし、 私も、前に時間がずれて「あれー」と思いながら直したことをぼんやり思い出したし、 実は以前から結構発生してたのではなかろうか。 今回、声が目立ってニュースにも取り上げられたということかも。

あと、最近広く採用されたBIOSにそういう設定のものがあったのかも知れない。

メーカーはもっと広く知らせるべきでは

と思うんだけど、 BIOSアップデートだとするとあんまり安易に勧められないしなあ。 Windows Updateでなんとかならんのだろうか。 ボードのファームウェアとなるとWindows Updateレベルでは難しいのかな。

結局、PC側の原因で問題が発生するのはどういう場合?

  • RTCの"Daylight Savings Enable"がEnableで、
  • RTCがずれるタイミングでPCが動いておらず(停止 or スリープ)、
  • その後PCを起動した場合(電源投入 or スリープ解除)

は確実に起こるかな。 OSがRTCと同期するとずれた時刻がOSに伝わる。

PCが稼働中にRTCがずれた場合はよくわからない。 OSがRTCに書き込む機会があるかどうかに依存するでしょう。

Windowsだけの問題?

いや、違うと思う。 ボード上のRTCがずれるんだから、 ずれた後に起動すれば例えばLinuxでも時間がずれるでしょう。

ただ、Linuxとかの場合、 どういうタイミング・方法でntpサーバーと同期しているのか知らないので、 その影響はよくわからない。 Windowsより短い期間で同期しているマシンが多いような気がする。 知らんけど。

まとめ

PCの時計がずれて直っていない人は、 PCメーカーからBIOSの更新が出ていないか確認してはどうでしょうか。

ただ、 BIOSアップデートは無条件にお勧めできるものでもないので、 アップデートするかどうかは注意事項をよく読んでからお決めください。

2017年3月 4日 (土)

SourceTreeでGit LSFを使うには

【要約】「リポジトリ」-「Git LFS」メニュー

分かれば簡単だけど、しばらく迷ってうろうろしたので覚え書き。

SourceTreeはGit LFSに対応していると聞いたのに、 どうやればリポジトリの扱いをGit LFSモードにできるのかが分かりませんでした。 「リポジトリ設定」の画面にも設定ないし。 ヘルプとか検索かけても出てこないし。

が、まあ、気づけば簡単で、 メニューに「リポジトリ」-「Git LFS」という項目がありました。 そのサブメニューの「Initialize Repository」から始めれば、 あとはだいたい見当ついた。

それだけ。

2016年11月23日 (水)

VS2017RCでローカルのDockerコンテナ上でアプリをデバッグ実行しようとすると"MSB4018"エラーになる問題

覚え書き。

問題点

"Connect(); 2016"のキーノートのデモで、 Visual Studio 2017を使ってASP.NET CoreアプリをローカルのDockerコンテナで動かすというやつ(ビデオでは1時間10分頃から)があります。 それを見て、いっちょやってみようと思うわけです。

ということで、Visual Studio 2017 RCとDocker for Windowsをインストールし、 「ASP.NET Core Webアプリケーション」をテンプレートから作り、 Docker上でデバッグ実行しようとすると、 以下のエラー(MSB4018)が出ます。

"PrepareForLaunch" タスクが予期せずに失敗しました。

Microsoft.DotNet.Docker.CommandLineClientException: Creating network "webapplication12161511896_default" with the default driver

Building webapplication1

Creating webapplication12161511896_webapplication1_1

ERROR: for webapplication1 Cannot create container for service webapplication1: E: drive is not shared. Please share it in Docker for Windows Settings

Encountered errors while bringing up the project..

解決法

Docker for Windowsにドライブ共有の設定を追加します。

Docker for Windowsの"Settings"画面の"Shared Drives"タブを開いて、コンテナがローカルディスクを参照できるようにします。 要するに、 ここに書いてある設定を行う。

私の例の場合、プロジェクトを置いているドライブ(E:ドライブ)とシステムドライブ(C:ドライブ)の両方を共有する必要がありました。

また、セキュリティソフト等でファイヤーウォールが有効になっている場合、 Docker for Windowsのネットワーク上(デフォルトでは 10.0.75.0/24)でWindowsのファイル共有(TCPのポート445)が通るようにしておかなければなりません。 その説明は、ここ。 具体的な設定の仕方は使っているセキュリティソフトによって異なります。

まあ…

Visual Studio Tools for Dockerのドキュメントにはちゃんと説明されているし、 エラーメッセージもちゃんと読めば指示が書いているんですけどね。 キーノートのビデオ見て「いっちょやったろ」とそのままやってみたら、私のようにはまるかなと。

2016年11月15日 (火)

LINEモバイルでLINEのSMS認証をスキップする件

子供らのスマホをWindows 10 Mobileにした話の続き。

結局、LINEモバイルに移行しました。 LINEフリープランを二人分で月1000円。 音声/SMSなし、LINEの基本サービスは使い放題で、その他は月1GB。 まあ、現在の使い方だと月1GBあれば十分です。

で、LINEモバイル採用の理由のひとつは、 SMS/音声認証不要のLINE登録なのですが、 そのやり方ではまったので、覚え書き。

LINE登録時のSMS認証のスキップ方法

LINEモバイルの「よくある質問・ヘルプ」の 「データSIMのSMSが使えないプランでもLINEの登録は可能でしょうか?」の項目には次のようにあります。

端末のWi-Fi接続をOFFにしてLINEアプリのアカウントを作成するとSMS認証をスキップすることができます。

というわけでやってみました。

WiFi接続を切り、LINEモバイル回線に接続した状態にし、 LINEアプリを起動、新規登録を選択。 しかし、そこは通常通り電話番号を入力する画面です。 他に選択肢はない。 SMS認証をスキップしてくれるんじゃないのか。

仕方ないので、データ回線の電話番号を入れます。 データ回線にSMS送られても受け取れないけど。 そして、「次へ」を押すと、この画面(この図の電話番号はフェイク)。

登録画面

あかん。 どうしてもSMSを送ろうとする。 いろいろ探したけど、ほかのルートはない。 仕方ないのでサポートに問い合わせました。 「Windows Mobileのアプリではできません」とか言われるんじゃなかろうかと泣きそう。

回答:「そのまま『次へ』を押せ」。

「次へ」を押すと、そのまま直ちに登録が完了しました。 「SMSで認証番号を送ります」ははったりであった。 なんやねん。

ということで、目的は達しました

LINE使えてます。 回線も問題ありません。 家庭内でスタンプが飛び交っています。 私はPC使っていることが多いので、 「お父さんに連絡する場合はSlackで送ってくれ」と言うわけですが、 常用デバイスがPCって年寄り扱いですよ。

2016年9月28日 (水)

Windows 10上のコンテナでLinuxイメージもWindowsイメージも同時に扱えるようになった(追記あり)

8月4日のエントリ「Windows 10のコンテナ機能とDocker for Windowsを共存させる上での問題点」に書いたように、 Windows 10 Anniversary Update(version 1607)ではコンテナ機能が使えるようになりましたが、 Windowsイメージを動かすエンジン(Windows 10 Container)とLinuxイメージを動かすエンジン(Docker for Windows)は共存できませんでした。

が、どうやらDocker for Windowsは、 ベータ26以降、 LinuxイメージもWindowsイメージも動かすことができるようになったようです。

Run Linux and Windows Containers on Windows 10

【2017年1月21日追記】 1.13.0以降、ベータでなくとも(Stable版でも)Docker for WindowsでLinux/Windows両方のコンテナが扱えるようになりました。

ということで、Windows上の各コンテナエンジンをいったんアンインストールして、 Docker for Windowsのページからベータ版をダウンロードしてインストールしました。 すると、上記ブログのアニメーションGIFの通り、 Docker for Windowsのタスクトレイアイコンから出るメニューに「Switch to Windows Containers...」が現れ、 これを選択するとdockerコマンドがWindows向けエンジンとつながるようになりました。 やったー。

が、まあ、Windowsイメージについては、 8月4日の別エントリ「Windows 10のコンテナ機能(Docker for Windowsじゃないよ)が動かない話と気になった点」に書いた ”The process cannot access the file because it is being used by another proces”問題が再現して動きませんでしたけど。 これ、解決しないなあ。

あと、Windows 10のコンテナ機能は、 開発者向け機能という位置づけです。 念のため。 運用向けには、今週”Microsoft Ignite 2016”で発表されたWindows Server 2016上のコンテナを使えということでしょう。

Igniteと同時に発表されたDockerのブログを見ると、 Windows版コンテナはDockerが深くかかわっているようですね。 "containers on Windows Server 2016 are powered by Dock"だと書いていますし、 "Docker containers run natively on Windows"と"container"ではなく"Docker container"と言い切っています。 2014年秋に「MicrosoftとDockerが協力してWindows Serverにコンテナを実装するよ」という発表をしていましたが、 出てきたモノは思ったよりDockerそのものらしい。

ということで、 Docker for WindowsがLinuxイメージの扱いとWindowsイメージの扱いを統合してくれる、 というのは自然な流れなのかな。

2016年9月12日 (月)

子供らのWindows 10 Mobileの話(高まるLINE圧力編)

先日の「子供らの「つなぎ携帯」をWindows 10 Mobileにしてみた話」のつづき。

子供らは手に入れたスマホを熱心にいじっています。 まあ、しばらくの間はねえ。 「勝手にゲーム入れるなよ」と言っておいたのですが、 下の息子はそれならばと、 ブラウザで昔懐かしいCookie Clickerを始めました。 今日もひたすらクッキーを増やしております。

さて、 LINEをどうするかという問題が懸案として残っていました。 特に娘は部活のメンバーがLINEを使っているし、 妻が日常的にLINEを使っていることもあって、 「LINE入れろ」圧力が家庭内で高まっております。

問題点は、 データ通信しか契約していない回線でどうやってLINEの初期認証を行うかでした。 多少じたばたやってみたので、その覚え書きのようなもの。

  • LINEのFacebook認証はWindowsでは使えない
  • MVNOではLINEの年齢認証ができないらしい
  • LINEモバイルとな?

LINEのFacebook認証はWindowsでは使えない

電話番号なしでLINE登録といえば、Facebook認証。 しかし、色々試したのですが、 結局WindowsではFacebook認証は利用できないようです。

※Facebook認証は、iOS⋅Androidのみ利用可能です。
SMSが使えず、Facebookによる認証も行えない場合、LINEに登録することはできません。

LINEのヘルプ - Windows Phoneから「SMSが使えない場合はどうしたらいいですか? 」

だそうです。

もう面倒くさくなって、 娘のWindows 10 MobileにLINEアプリを入れ、 家の固定電話の電話番号と関連付けてしまいました。

でも、 うちには他に余っている電話番号がないから、 息子がLINEやりたいといい始めたらもう使える番号がない。

MVNOではLINEの年齢認証ができないことがある

年齢認証はキャリアの契約情報を見ているようで、 MVNOのSIMでは年齢認証できないことがあるようです。 年齢認証できないと、ID検索等の一部サービスが利用できません。

年齢認証は、au(KDDI)、NTTドコモ、ソフトバンクモバイル各社が提供する年齢情報判定サービスを利用し、18歳未満かどうかを確認しています。
契約したSIMが上記3社で提供している年齢情報判定サービスをご利用いただけない場合、年齢認証はできません。

LINEのヘルプから「格安SIMを利用しているが、年齢認証ができない」

この書き方だと「できる場合もある」ようですが、 Webでほかの人の書いているのをざっと見た印象では、 「ふつうはできない」感じ。

まあ、うちの子らはどっちみち年齢認証できる年齢じゃないから関係ないけど。

LINEモバイルとな?

そんなこんなでやっていると、 タイミングよくLINEモバイルが発表されました。

LINEモバイル

一番安いプランだと、

  • LINEの基本的な機能(LINE通話も含む)は使い放題
  • その他のデータ通信は1G/月

で、500円/月。 うちの用途だと、 コミュニケーションをLINE中心にすれば、このプランで十分まかなえるんじゃなかろうか。 子供二人分だと1000円/月で、現在の約2000円/月の半額。 まあ、データ容量は少なくなるし、おまけで運用しているわしのSurface 3の分がなくなるけど。 しかも、SMSなしでアカウント登録できるし、年齢認証にも対応。 ごちゃーごちゃやってた苦労がいらんようになるやないですか。

2週間早く発表されてたら申し込んでいたと思うけど、 もう事務手数料払ってDMM mobileと契約しちゃったからなあ。 正式提供は10月1日からのようなので、 その後回線の評判がよいようならば、 乗り換えるかも。

ということで、 家族グループ内でスタンプが飛び交っております。

2016年8月 4日 (木)

Windows 10のコンテナ機能とDocker for Windowsを共存させる上での問題点(追記あり)

覚え書き。

前回のエントリで書いたように、 Windows 10 Anniversary Update(version 1607)では二種類のコンテナツールを利用できます。 (Windows 10 コンテナはまだ動かせていないけど)

ツールコンテナで動かすイメージ提供者
Windows 10 コンテナWindowsイメージMicrosoft
Docker for WindowsLinuxイメージDocker

これらを共存させ、 dockerコマンドで操ることができれば、 Windows 10上でLinux環境もWindows環境もさくさく立ち上げることができて便利だと思うわけです。

で、両者が共存できるか試してみました。

結論から言えば、「両者を同時に動かすことはできない」なんですが、 試して分かった点について書き留めます。

【2016/09/28 追記】 Docker for Windowsのベータ26以降、Docker for WindowsでLinuxイメージもWindowsイメージも両方取り扱うことができるようになりました。 「Windows 10上のコンテナでLinuxイメージもWindowsイメージも同時に扱えるようになった」を参照。

コンテナ機能の構造

これらのツールを、ざっくり以下の二つの部分に分けます。

  • CLI部分(要するにdockerコマンド部分)
  • エンジン部分(Docker Engine)

エンジン部分は両者ともサービスとして稼働し、 Hyper-Vを間に挟んでコンテナを動かします。 Windows 10コンテナはWindowsのイメージを動かしますし、 Docker for WindowsはLinuxのイメージを動かします。

Windowsコンテナには本来のコンテナに近い形態の「Windows Server Containers」と、 コンテナホストとコンテナのカーネルをHyper-Vで分離する形態の「Hyper-V Containers」があり、 Windows 10コンテナでは「Hyper-V Containers」のみがサポートされています。

両エンジンのWindowsサービスとしての名前は以下の通り。

  • Windows 10コンテナ: Docker Engine(いかにも仮の名前っぽいので、そのうち変更されそう)
  • Docker for Windows: Docker for Windows Service

一方、 CLI部分は両者ほぼ同じです。 Windows 10コンテナの方が少し新しいぐらい。 実際、 CLI部分を両者交換しても、 動作に影響はありませんでした。

ちなみに、docker versionコマンドを実行すると、 以下のような結果になります。

Windows 10コンテナの場合。

PS C:\Temp> docker version
Client:
Version: 1.13.0-dev
API version: 1.25
Go version: go1.6.3
Git commit: 87e48ec
Built: Wed Aug 3 20:33:19 2016
OS/Arch: windows/amd64

Server:
Version: 1.13.0-dev
API version: 1.25
Go version: go1.6.3
Git commit: 87e48ec
Built: Wed Aug 3 20:33:19 2016
OS/Arch: windows/amd64

Docker for Windowsの場合。

PS C:\Temp> docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: windows/amd64

Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: linux/amd64

問題点

両者ともCLIとエンジンの間の通信は名前付きパイプを通して行っています。 この名前付きパイプの名前が"//./pipe/docker_engine"に固定されています。 ざっと見、この名前を変更できる設定を見つけることはできなかった。

なので、 一方のエンジンが稼働中に、 もう一方のエンジンを起動しようとすると、 「名前付きパイプのオープンに失敗した」エラーで起動失敗します。 イベントログを見てみると、 "fatal: open //./pipe/docker_engine: Access is denied." とか出てます。

ということで、 両者を同時に稼働させることができません。 私は、両方のサービスの起動方法を「手動」に設定して、 手動でエンジンを切り替えてます。

あと、 直接不具合は経験していないけど、 両者ともに作業フォルダとして%ProgramData%\Docker以下を使うことがあるようで、 両者の作業が干渉しないかちょっと心配。

今後どうなる?

うーん。

CLI側はdockerコマンドの-Hオプションに名前付きパイプの名前を指定すれば、 それと通信するようになるんじゃないかな。

とすると、どちらかのエンジンが使う名前付きパイプの名前を変更するのかなあ。 デフォルトはどっちになるんだとか、 面倒にならなければいいんだけど。

希望としては、 同一のdockerコマンドで、 LinuxイメージもWindowsイメージも、 どっちのエンジンとか気にせずに操れるようになればうれしいんだけれども。

Windows 10のコンテナ機能(Docker for Windowsじゃないよ)が動かない話と気になった点

覚え書き。

Windows 10 Anniversary Updateが公開され、 それに伴い、Windows 10のコンテナ機能も一般利用可能になりました。

で、Windows 10のコンテナ機能を使ってみようとしてみたところ、

  • 手順通りにやっても動かない点
  • 気になった点

があったので、それを書き留めておきます。

Windows 10のコンテナ機能とは

Windows 10のコンテナ機能とは、

  • Microsoft純正の、
  • docker互換である、
  • 「Windowsコンテナ」(Windows Server 2016の機能)の、
  • サブセットをWindows 10に載せたものであり、
  • (プレビューではない「正式」なWindows 10としては)Windows 10 Anniversary Update(version 1607)以降で利用できます (でもまだ仕上がってない感触)。

前回のエントリで動かした Docker for Windowsとはまた別物です。

ツールコンテナで動かすイメージ提供者
Windows 10 コンテナWindowsイメージMicrosoft
Docker for WindowsLinuxイメージDocker

でも、どちらもdockerコマンドでコントロールできます。

Windows 10のコンテナ機能の有効化方法

コンテナ機能を利用できるのは、 Windows 10 (version 1607)のProまたはEnterpriseです。

有効化手順は、 「Windows コンテナーに関するドキュメント」の中の 「Windows 10 の Windows コンテナー」 の通り。

問題点

上記の「Windows 10 の Windows コンテナー」の手順中の、 「3.コンテナーの基本イメージのインストール」が動きません。

この手順は、 最初のイメージとしてNano Server(最小構成のWindows Server 2016)ベースイメージをダウンロードし、 それを登録するものです。 現状のWindows 10のコンテナ機能は、 リポジトリからのpullが実装されていないため、手動でこれを行うわけですね。

手順には以下のコマンドを実行しろとありますが、

docker load -i nanoserver.tar.gz

実際に実行してみると、エラーになります。

PS C:\Temp>docker load -i nanoserver.tar.gz
58684737b3d1: Loading layer [==================================================>] 358.4 MB/358.4 MB
re-exec error: exit status 1: output: ProcessUtilityVMImage C:\ProgramData\Docker\windowsfilter\facecd91a2eee5e77d3046e9
a4b63daffe037fc96725e6d6ca5b847ebde016ce\UtilityVM: The process cannot access the file because it is being used by anoth
er process.

素直に受け取ると、 一時ファイルをクローズせずに次の工程へ渡している単純ミスっぽいけど。

回避法

見つけられていません。 まあ、どうせすぐ直すだろうと諦めた。

MSDNの「Windows Containers」フォーラムで同じ問題が報告されていましたので、 Voteしました。

re-exec error when trying to load nanoserver image (MSDN "Windows Containers" Forum)

でも他にVote無いんだけど、みんなちゃんと動いているのかな。

他に気になる点

Windows 10のコンテナ機能に対し、 ユーザー権限(非管理者権限)でdockerコマンドを実行するとエラーになります。 こんな感じ。

PS C:\Temp> docker version
Client:
Version: 1.13.0-dev
API version: 1.25
Go version: go1.6.3
Git commit: 87e48ec
Built: Wed Aug 3 20:33:19 2016
OS/Arch: windows/amd64
An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.25/version: open //./pipe/docker_engin
e: Access is denied.

Docker Engine相当のものがWindowsサービスとして動いており、 それと通信するための名前付きパイプのアクセス権が管理者に限定されているのでしょう。

dockerコマンドによって危険なコンテナを動かすこともできますし、 dockerコマンドに管理者権限が必要だというのは分かります。 まあ、もうちょっとユーザー向けなエラーメッセージ出したほうがいいんじゃない、というのはあるけど。

でも、 Linuxでのdockerの使われ方を参考にするなら、 グループを作ってそのグループのユーザーのみアクセスできる、 という形態にしないと、 使い勝手が悪くなるんじゃないかなあ。

一方、 Docker for Windowsは、 現状ユーザー権限でdockerコマンドが問題なく動いてしまいます。 こっちはこっちで心配になる。

Docker for Windowsで"Network timed out"と言われてイメージを取ってこれない問題

覚え書き。

問題点

典型的には、 「Getting Started with Docker for Windows」の「Step 4. Explore the application and run examples」の手順にある、

PS C:\Work> docker run hello-world

を実行しようとすると、以下のようなエラーが出ます。 (問題の個所を赤字にしている)

PS C:\Work> docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Network timed out while trying to connect to https://index.dock
er.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a
proxy..

See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

今回はリポジトリからイメージをpullしようとしているところだけど、 外部のネットワークに接続に行く局面で同じ問題が出るのではないかな。

発生条件

今回問題が起きて、対処した環境は以下。

  • OS: Windows 10 Pro (x64) version 1607 (build 14393.10)
  • Docker for Windows 1.12.0 (「プログラムと機能」上で表示されるバージョンは2.0.5968)

回避法

IPv6を無効にしたら通るようになりました。

Docker for WindowsはHyper-V必須ですので、 「コントロールパネル」-「ネットワークとインターネット」-「ネットワーク接続」へ行くと、 Hyper-V関連の接続を含めて色々な接続があります。 そこで、実際に外部に直接繋がっている接続の「プロパティ」を開き、 「ネットワーク」タブの「インターネットプロトコルバージョン6 (TCP/IPv6)」のチェックを外しました。

備考

なんでIPv6を無効にしてみる気になったかというと、 ログファイル(Docker for Windowsの「Diagnose & Feedback」から出せる)に以下が出ていたからです。 (注目点を赤字にしています。各行のヘッダ部は省略)

Found dns server xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
Forward DNS query on udp to xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:53
Exchange error: dial udp: too many colons in address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:53

※ "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx"は実際には私のマシンのDNSアドレス

内部でアドレスをどういう形式で持っているかわからないけど、 これ、"[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:53"となっているべきだよなあ。 というわけで、なんかバグってるんじゃなかろうかと疑いました。

余談

Docker for WindowsはPrivate Beta時代から試しているんだけど、 実はずっとまともに動かせていませんでした。 今日、Windows 10 Anniversary Updateを入れて、 新機能のWindows 10のコンテナ機能を試すついでにまじめに調べてみました。

で、今度はWindows 10のコンテナ機能の方がまだうまく動かせていない。orz

2016年2月 8日 (月)

ニコニコ動画を見れないアカウントがある話

同一Windowsマシン上で、ニコニコ動画を見れるアカウントと見れないアカウントがあるという話。現在も解決していませんが、今回試したことを覚え書きとして残しておきます。

現象(現在)

マシンはWindows 10 Home。 HDDが壊れたことに伴い、クリーンインストールしたもの。

インストールアカウントである私のアカウントではEdge, IE 11ともにニコニコ動画を再生できます。一方、その他のアカウント(妻や子供)では再生できません。問題のある場合の現象は以下の通り。

Edgeの場合

IE 11の場合

Chromeだと問題なく再生できるので、Chromeを使ってもらっています。が、なんか気持ち悪い。

経緯

二三年前、家族の共用マシンをWindows 8にしたら、ニコニコ動画が見れなくなったと子供に苦情を言われたのが始まりです。上記のIE 11の現象が発生していました。

同じマシンの上で私のアカウントだと問題なく再生できます。このときは確か、今と違って、私の他にも再生できるアカウントがあったはず。再生できる環境とできない環境の違いはまったく見当つかず。

とりあえずChromeを使ってもらってしのいでいましたが、 Windows 8.1にアップデートしたらなぜか問題が発生しなくなりました。

で、この秋にWindows 10にしたら問題が再発しました。

検索すると、似たような現象に遭遇している人はいるようですが、解決した人は見かけない。

今までのやってみたこと

以下のようなことをやってみましたが、問題は解決しませんでした。

  • Flash Player最新化。
  • セキュリティソフトを一時的に停止。
  • IEの「アドオンの管理」で、Flash Playerの有効/無効を何回か切り替えてみる。
  • (IE向け)Flash Playerのアンインストール/再インストール。
  • IEのリセット。
  • 管理者権限ありなしで試行
  • その他ニコニコ動画のサポートにある手順など

今回やってみたこと

たまたま、Microsoftのコミュニティで似たようなケースを見つけました。このケースはWindows 8.1で、結局解決していません。

質問者の方がファミリーセーフティを使っているとのことで、そういえばうちもファミリー設定していたなと思い、ファミリー外のアカウントを作ってニコニコ動画にアクセスしてみました。

が、Edge/IE 11ともに同じ現象のままでした。はずれ。